在以下代码中:
public class A
{
public A():this(null){}
public A(string b){/*code here*/}
}
第一个构造函数有什么用?
答案 0 :(得分:26)
第一个构造函数将null
传递给第二个构造函数的参数b。
因此,如果您致电new A()
,则与调用new A(null)
答案 1 :(得分:5)
当你有一个带参数
的构造函数时public A(string b){ /* code here */ }
public A():this("") { } //default
默认构造函数实际上使用“”作为参数调用“参数构造函数”。您正在传递参数。这样做是为了避免两次编写相同的代码
答案 2 :(得分:3)
答案 3 :(得分:3)
当你重载构造函数时会发生这种情况。
在您的示例中,空构造函数public A():this(null){}
查找可以接受对象值null的构造函数。由于字符串是一个可以取空值的对象,因此它会调用该构造函数。
这个例子看起来非常简单。
一个更有意义的例子(但仍保持基本):
public class AddNumbers
{
public AddNumbers():this(100, 100)
{ }
public AddNumbers(int x, int y)
{
int sum = x + y;
Console.WriteLine(sum.ToString());
}
}
在这个例子中,当一个调用程序调用空构造函数时,它将输出200.因为它调用的是AddNumbers方法,x = 100,y = 100。
我知道这是一个简单的例子,但我希望能让它更清晰。
答案 4 :(得分:1)
这是一个默认构造函数,使用b == null调用第二个。
答案 5 :(得分:0)
某些接口或设计人员需要有一个“无参数”构造函数。
这种方法在那些时候派上用场。
答案 6 :(得分:0)
使用对象初始化时需要使用无参数的默认构造函数:
Employee e = new Employee() {FirstName="John", LastName="Smith"};
在这种情况下,我可能不会使用构造函数链接。构造函数重载为您提供了使用参数初始化的替代方法。构造函数链接真正有用的地方在于构造函数参数是可选的; C#不支持可选参数。
“最佳实践”将取决于具体情况,用途,架构,要求等。(ISO咨询规则第一:“这取决于。”)