2012-02-14 96 views
11

C#中的類怎麼可能沒有定義構造函數? 比如我有一個類沒有構造函數的C#類

internal class TextStyle 
{ 
    internal string text = ""; 
    internal Font font = new Font("Arial", 8); 
    internal Color color = Color.Black; 
} 

而在這段代碼類實例化作爲

TextStyle textParameters = new TextStyle(); 

回答

31

如果沒有一個非靜態類聲明任何構造函數,編譯器提供了一個公共(或受保護的抽象類)爲你的無參數構造函數。你們班有有效的構造:

public TextStyle() 
{ 
} 

這是在C#4規範的節10.11.4描述:

如果一個類不包含任何實例構造函數聲明,默認的構造函數是自動提供。該默認構造函數只是調用直接基類的無參數構造函數。如果直接基類沒有可訪問的無參數實例構造函數,則會發生編譯時錯誤。如果該類是抽象的,則默認構造函數的聲明可訪問性爲protected。否則,默認構造函數的聲明可訪問性爲public

在C#中唯一的類不具有任何例如構造函數是靜態類,它們不能有構造函數。

0

如果你沒有定義其他的構造函數,就有一個隱含的空構造函數。

+3

-1;這有效地重複了Jon Skeet在40秒之前寫下的內容,但重複了錯別字,沒有詳細信息,也沒有權威的參考。這個答案不會爲頁面添加任何值。 – 2017-04-28 12:40:31