創建一個引用類型的實例時,
首先為實例的數據字段分配內存,
然後初始化對象的附加字段(對象指針、同步塊索引),
最後調用類型中定義的實例構造器來設置對象的初始化狀態。
構造引用類型的對象時,在調用類型的實例構造器之前,為對象分配所有字段的內存總是被先歸零或為null。
實例構造器永遠不能被繼續。如果定義的類中沒有顯式構造器,
c#編譯器將定義一個默認構造器,在它的實現中,只是簡單調用基類的無參構造器。
所以:
public class SomeType{}
等價於
public class SomeTyoe{
public SomeType():base(){}
}
如果類的修飾符是abstract,那麼編譯器生成的默認的構造器是protected,否則是public。
如果基類沒有提供無參構造器,那麼派生類就必須顯示調用一個基類構造器,否則編譯報錯。
如果是靜態類,那麼類沒有實例構造器。
在類中訪問基類的字段之前,必須調用基類的構造器,如果沒有顯式調用基類的構造器,
c#編譯器會自動生成對默認的基類構造器的調用,最後會調用Object的構造器。