2014-12-05 396 views
0

我在围绕这个问题时遇到了麻烦。我有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参数构造函数?

回答

7

通过调用默认的两个参数的构造函数,传递的默认值,比如:

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

} 
+1

关于将默认值传递给默认构造函数:目的通常是通过类/库作者内置的常量提供默认值来简化类的使用。因此,寻求使用默认值的客户端只需简单地调用构造函数就可以不带参数,这样做的好处是不必提供2个参数,除非需要覆盖默认值。 – condiosluzverde 2014-12-05 04:04:17

+0

所以在上面的“这个”部分正在调用2参数的构造函数?但它只是通过默认值?也许我一直在想这个。我的头说如果你调用2参数的构造函数,你会得到2个参数,而不是默认值。 – ScottT 2014-12-05 04:11:22

+0

是的,这个关键字引用当前类,所以'this(arg1,arg2)'调用构造函数,传递默认值。它基本上与用户调用传递默认信息的2参数构造函数相同,只是用户不需要如果他们需要默认信息 – Shadow 2014-12-05 04:14:49

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; 
    } 
} 

我们答案问题为什么这甚至是必要的。 ...

这是为了确保如果您遇到代码中的实例化对象 - 无论它如何实例化(使用构造函数) - 它将始终具有有效值的属性名称 & 类别

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