如何使用无参构造函数调用带有2个参数的构造函数?
问题描述:
我在围绕这个问题时遇到了麻烦。我有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参数构造函数?
答
通过调用默认的两个参数的构造函数,传递的默认值,比如:
public Instrument() : this(DefaultName, DefaultCategory)
{
}
答
这是你如何能做到这...
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;
}
}
我们答案问题为什么这甚至是必要的。 ...
这是为了确保如果您遇到代码中的实例化对象 - 无论它如何实例化(使用构造函数) - 它将始终具有有效值的属性名称 & 类别。
基本上,它可能会使您的业务对象无bug。任何使用您的业务对象的人都会在其属性中使用有效值 - 默认值或使用第二个构造函数传入。
关于将默认值传递给默认构造函数:目的通常是通过类/库作者内置的常量提供默认值来简化类的使用。因此,寻求使用默认值的客户端只需简单地调用构造函数就可以不带参数,这样做的好处是不必提供2个参数,除非需要覆盖默认值。 – condiosluzverde 2014-12-05 04:04:17
所以在上面的“这个”部分正在调用2参数的构造函数?但它只是通过默认值?也许我一直在想这个。我的头说如果你调用2参数的构造函数,你会得到2个参数,而不是默认值。 – ScottT 2014-12-05 04:11:22
是的,这个关键字引用当前类,所以'this(arg1,arg2)'调用构造函数,传递默认值。它基本上与用户调用传递默认信息的2参数构造函数相同,只是用户不需要如果他们需要默认信息 – Shadow 2014-12-05 04:14:49