共用方式為


結構設計

備註

此內容經Pearson Education, Inc.授權從架構設計指導方針:可重複使用 .NET 程式庫的慣例、習慣用語與範式 (第2版)轉載。 該版於2008年出版,該書自那以後已於 第三版全面修訂。 此頁面的某些資訊可能已過期。

一般用途的值類型通常稱為結構體,這是其在 C# 程式語言中的關鍵字。 本節提供一般結構設計的指導方針。

❌ 請勿提供結構體的無參數建構函式。

遵循此指導方針可建立結構陣列,而不需要在陣列的每個專案上執行建構函式。 請注意,C# 不允許結構具有無參數建構函式。

❌ 請勿定義可變實值型別。

可變動的實值類型有數個問題。 例如,當屬性 getter 傳回實值類型時,呼叫端會收到複本。 因為複製是隱含建立的,所以開發人員可能不知道它們正在變更複本,而不是原始值。 此外,某些語言(特別是動態語言)在使用可變動的實值類型時發生問題,因為即使是局部變數,當取值時,都會產生複本。

✔️ 請確定所有實例數據都設定為零、false 或 Null 的狀態(適當時)有效。

這可防止在建立結構陣列時意外建立無效的實例。

✔️ DO 在值類型上實作 IEquatable<T>

Object.Equals實值型別上的方法會造成裝箱,而且其預設實作並不十分有效率,因為它使用反射。 Equals 可以有更好的效能,而且可以實作,這樣它就不會造成拳擊。

❌ 請勿明確擴充 ValueType。 事實上,大部分的語言都會防止這種情況發生。

一般而言,結構體非常實用,但應僅用於不會經常進行封箱處理的小型、單一且不可變的值。

© 2005年、2009年Microsoft公司部分。 保留所有權利。

經 Pearson Education, Inc. 許可重新刊登自 Krzysztof Cwalina 和 Brad Abrams 所著的 架構設計指導方針: 可重複使用的 .NET 程式庫慣例、慣用語和模式,第 2 版,2008 年 10 月 22 日由 Addison-Wesley Professional 發行,作為 Microsoft Windows 開發系列的一部分。

另請參閱