簡體   English   中英

C#代碼在做什么:

[英]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

默認構造函數實際上以“”作為參數調用“參數構造函數”。 您正在傳遞參數。 這樣做是為了避免兩次編寫相同的代碼

這是一個構造函數重載

我同意在這種情況下它似乎不是很有用,因為字符串的未初始化值很可能還是為null。

另請參見C#中的構造方法

當您重載構造函數時,會發生這種情況。

在您的示例中,空的構造函數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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM