【问题标题】:How to call constructor with 2 arguments from a no argument constructor?如何从无参数构造函数调用带有 2 个参数的构造函数?
【发布时间】:2015-02-03 04:20:02
【问题描述】:

我很难理解这个问题。我有 2 个构造函数。第一个有 2 个参数:

public Instrument(string name, string category)
{
    this.Name = name;
    this.Category = category;
}

然后我有一个带有默认常量的默认(无参数)构造函数:

public Instrument()            
{
    this.Name = DefaultName;
    this.Category = DefaultCategory;
}

我还应该从无参数构造函数中调用 2 参数构造函数。我该怎么做呢?我也质疑为什么这甚至是必要的。如果您从默认值调用 2 参数,您将如何将默认值传递给应用程序?所以我想我的主要问题是如何从默认构造函数中调用 2 参数构造函数?

【问题讨论】:

    标签: c# constructor default-constructor


    【解决方案1】:

    通过调用默认的两个 arg 构造函数,传递默认值,如下所示:

    public Instrument() : this(DefaultName, DefaultCategory)
    {
    
    }
    

    【讨论】:

    • 关于将默认值传递给默认构造函数:其目的通常是通过类/库作者通过内置常量提供默认值来简化类的使用。因此,寻求使用默认值的客户端将简单地调用不带参数的构造函数,这获得了不需要提供 2 个参数的预期好处,除非她或他需要覆盖默认值。
    • 那么在上面的“this”部分是调用2参数构造函数吗?但它只是通过默认值?也许我一直在想这个。我的意思是,如果你调用 2 参数构造函数,你将得到 2 个参数而不是默认值。
    • 是的,这个关键字指的是当前类,所以this(arg1, arg2)调用构造函数,传递默认值。这与用户调用 2 参数构造函数传递默认信息基本相同,只是用户需要默认信息时不必这样做
    【解决方案2】:

    你可以这样做...

    public class Instrument
    {
        public string Name;
        public string Category;
    
        public Instrument()
            : this("DefaultName", "DefaultCategory")
        {
    
        }
    
        public Instrument(string name, string category)
        {
            this.Name = name;
            this.Category = category;
        }
    }
    

    现在回答这个问题为什么这是必要的。...

    这是为了确保如果您在代码中遇到实例化对象 - 不管它是如何实例化的(使用任一构造函数) - 它的属性中始终具有有效值 Name & 类别

    基本上,它可能使您的业务对象没有错误。使用您的业务对象的任何人都将始终在其属性中具有有效值 - 默认值或使用第二个构造函数传入。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-08
      • 2018-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多