2013-07-12 68 views

回答

1

Using Constructors (C# Programming Guide)

構造函數結構類型類似於類的構造函數,但結構 不能包含一個明確的默認構造函數,因爲一個是由編譯器自動提供 。

再檢查一下這個Why can't I define a default constructor for a struct in .NET?

+0

爲什麼不能在C++一樣 - 當明確的默認構造函數提供的使用它,在未設置生成和編譯器提供的使用呢? –

+0

@BorisPitel:.NET假定*任何類型*的存儲位置可以通過填充其佔用的內存來初始化爲其默認值。這將設置參考類型的位置或者可爲空值爲'null',將數字基元設置爲零,並將結構的所有字段設置爲它們各自類型的默認值。這樣的設計意味着系統可以初始化任何類型 - 無論多麼複雜 - 只需填充零即可。還要注意能夠自動調用更復雜的構造函數的有用性...... – supercat

+0

......在許多情況下,它將依賴指定複製構造函數和C++風格的析構函數的能力;在這裏再一次,.NET假定複製一個結構所需要的唯一東西是複製其佔用的內存(這再次僅需要知道大小),並且銷燬結構所需的唯一東西是放棄或覆蓋它佔據的空間。這樣的假設大大簡化了框架和語言。儘管我很樂意授予適當的結構體構造函數,複製構造函數和析構函數通常很有用,但不清楚它們是否值得花費大量成本。 – supercat

相關問題