[英]What is C# code doing:
在下面的代碼中:
public class A
{
public A():this(null){}
public A(string b){/*code here*/}
}
first構造函數的用途是什么?
第一個構造函數將null
傳遞給第二個構造函數的參數b。
因此,如果您調用new A()
,它將與調用new A(null)
當你有一個帶有參數的構造函數
public A(string b){ /* code here */ }
public A():this("") { } //default
默認構造函數實際上以“”作為參數調用“參數構造函數”。 您正在傳遞參數。 這樣做是為了避免兩次編寫相同的代碼
當您重載構造函數時,會發生這種情況。
在您的示例中,空的構造函數public A():this(null){}
查找可以接受對象值為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。因為它正在使用x = 100,y = 100調用AddNumbers方法。
我知道這是一個簡單的示例,但我希望這可以使它更清楚。
這是一個默認構造函數,使用b == null調用秒。
一些接口或設計器要求那里有一個“無參數”構造函數。
在那個時候,這種方法很方便。
使用對象初始化時,需要具有無參數的默認構造函數:
Employee e = new Employee() {FirstName="John", LastName="Smith"};
在這種情況下,我可能不會使用構造函數鏈接。 構造函數重載為您提供了一種使用參數進行初始化的替代方法。 構造器鏈真正有用的地方是使構造器參數可選。 C#目前尚不支持可選參數。
“最佳實踐”將取決於情況,用法,體系結構,要求等(ISO咨詢規則第一:“取決於”。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.