如何在 c# 中调用与构造函数不同的构造函数? [复制]

Posted

技术标签:

【中文标题】如何在 c# 中调用与构造函数不同的构造函数? [复制]【英文标题】:How can I invoke a different constructor from a constructor in c#? [duplicate] 【发布时间】:2016-12-09 20:51:43 【问题描述】:

我有以下课程

public class ReportDataSource : IReportDataSource

    public string Name  get; set; 
    public string Alias  get; set; 
    public string Schema  get; set; 
    public string Server  get; set; 

    public ReportDataSource()
    
    

    public ReportDataSource(ReportObject obj)
    
        this.Name = obj.Name;
        this.Alias = obj.Alias;
        this.Schema = obj.Schema;
        this.Server = obj.Server;
    

    public ReportDataSource(ReportObject obj, string alias)
    
        this.Name = obj.Name;
        this.Schema = obj.Schema;
        this.Server = obj.Server;

        this.Alias = alias;
    


在构造函数中ReportDataSource(ReportObject obj, string alias) 的行为与ReportDataSource(ReportObject obj) 完全相同。唯一不同的是我可以覆盖alias 属性。

有没有办法可以从ReportDataSource(ReportObject obj, string alias) 内部调用ReportDataSource(ReportObject obj),这样我就不必复制我的代码了?

我试过了

    public ReportDataSource(ReportObject obj, string alias)
        :base(obj)
    
        this.Alias = alias;
    

但我收到此错误

'object' 不包含带 1 个参数的构造函数

如何在 c# 的构造函数中调用与 with 不同的构造函数?

【问题讨论】:

【参考方案1】:

试试this:

public ReportDataSource(ReportObject obj, string alias)
    :this(obj)

    this.Alias = alias;

它有时被称为构造函数链

this(argument-listopt) 形式的实例构造函数初始化器strong> 导致调用类本身的实例构造函数。使用 argument-list 和第 7.5.3 节的重载解析规则选择构造函数。

【讨论】:

成功了!谢谢。时间允许,我会接受你的回答

以上是关于如何在 c# 中调用与构造函数不同的构造函数? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

C#中子类构造函数中如何调用父类构造函数

C#在自己的构造函数之后调用基类的构造函数?

c#带参构造函数如何调用?

C# - 在一些计算后从另一个构造函数调用构造函数[重复]

c# 子类如何调用父类的构造函数

C#基础----方法与构造函数