什么是C#代码:

时间:2009-10-30 07:31:21

标签: c# constructor-chaining

在以下代码中:

public class A
{
public A():this(null){}
public A(string b){/*code here*/}
}

第一个构造函数有什么用?

7 个答案:

答案 0 :(得分:26)

第一个构造函数将null传递给第二个构造函数的参数b。

因此,如果您致电new A(),则与调用new A(null)

相同

答案 1 :(得分:5)

当你有一个带参数

的构造函数时
public A(string b){ /* code here */ }

public A():this("") { }  //default

默认构造函数实际上使用“”作为参数调用“参数构造函数”。您正在传递参数。这样做是为了避免两次编写相同的代码

答案 2 :(得分:3)

这是constructor overload

我同意在这种情况下似乎没有用处,因为无论如何,字符串的未初始化值很可能是空的。

另见Constructors in C#

答案 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咨询规则第一:“这取决于。”)