在以下代码中:
public class A
{
public A():this(null){}
public A(string b){/*code here*/}
}
第一个构造函数有什么用?
在以下代码中:
public class A
{
public A():this(null){}
public A(string b){/*code here*/}
}
第一个构造函数有什么用?
第一个构造函数传入null
第二个构造函数的参数 b。
因此,如果您调用new A()
它将与调用相同new A(null)
当你有一个带参数的构造函数时
public A(string b){ /* code here */ }
public A():this("") { } //default
默认构造函数实际上以“”为参数调用“参数构造函数”。您正在传递一个参数。这样做是为了避免两次编写相同的代码
当您重载构造函数时会发生这种情况。
在您的示例中,空构造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。
我知道这是一个简单的例子,但我希望它更清楚。
这是一个默认构造函数,它使用 b==null 调用第二个。
一些接口或设计器要求有一个“无参数”的构造函数。
这种方法在那个时候就派上用场了。
使用对象初始化时需要有一个无参数的默认构造函数:
Employee e = new Employee() {FirstName="John", LastName="Smith"};
不过,在这种情况下,我可能不会使用构造函数链接。构造函数重载为您提供了另一种使用参数进行初始化的方法。构造函数链接真正有用的地方在于使构造函数参数可选;C# 不支持可选参数(目前)。
“最佳实践”将取决于情况、使用、架构、要求等。(ISO 咨询规则第一条:“视情况而定。”)