共用方式為


建構函式設計

備註

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

建構函式有兩種:類型建構函式和實例建構函式。

類型建構函式是靜態的,而且會在使用類型之前由CLR執行。 實例建構函式會在建立型別的實例時執行。

類型建構函式無法接受任何參數。 實例建構函式可以。 不採用任何參數的實例建構函式通常稱為無參數建構函式。

建構函式是建立型別實例的最自然方式。 大部分的開發人員會先搜尋並使用建構函式,再考慮建立實例的替代方式(例如 Factory 方法)。

✔️ 請考慮提供簡單、理想情況下的預設建構函式。

簡單的建構函式有非常少量的參數,而且所有參數都是基本類型或列舉。 這類簡單的建構函式會增加架構的可用性。

✔️ 如果所需作業的語意不會直接對應至新實例的建構,或遵循建構函式設計指導方針感覺不自然,請考慮使用靜態處理站方法,而不是建構函式。

✔️ DO 使用建構函式參數作為設定主要屬性的快捷方式。

使用空白建構函式後面接著一些屬性集,以及使用具有多個自變數的建構函式,在語意上應該沒有任何差異。

✔️ 如果建構函式參數用來直接設定屬性,則請對建構函式參數和 屬性使用相同的名稱。

這類參數與屬性之間的唯一差異應該是大小寫。

✔️ 在建構函式中執行最少的工作。

建構函式不應該執行擷取建構函式參數以外的工作。 任何其他處理的成本應該延遲到需要為止。

✔️ 如果適當,應從實例建構函式中擲出例外事件。

✔️ 如果需要這類建構函式,DO 會在類別中明確宣告公用無參數建構函式。

如果您未在類型上明確宣告任何建構函式,則許多語言 (例如 C#) 會自動新增公用無參數建構函式。 (抽象類會取得受保護的建構函式。

將參數化建構函式新增至 類別可防止編譯程式新增無參數建構函式。 這通常會導致意外的破壞性變更。

❌ 避免在結構上明確定義無參數建構函式。

這可讓陣列建立更快,因為如果未定義無參數建構函式,就不需要在陣列的每個位置執行。 請注意,許多編譯器(包括 C#)不允許結構具有無參數的構造函式。

❌ 避免在其建構函式內呼叫 物件上的虛擬成員。

呼叫虛擬成員時會導致最衍生類別的覆寫成員被呼叫,即使最衍生類別的建構函式尚未完全執行。

類型建構函式指導方針

✔️ 確保將靜態建構函式設為私有的。

靜態建構函式也稱為類別建構函式,可用來初始化型別。 CLR 會在建立型別的第一個實例之前呼叫靜態建構函式,或呼叫該類型上的任何靜態成員。 用戶無法控制呼叫靜態建構函式的時機。 如果靜態建構函式不是私人建構函式,則可以由CLR以外的程式代碼呼叫。 視建構函式中執行的作業而定,這可能會導致非預期的行為。 C# 編譯程式會強制將靜態建構函式設為私用。

❌ 請勿從靜態建構函式擲回例外狀況。

如果從類型建構函式擲回例外狀況,則類型無法在目前的應用程式域中使用。

✔️ 請考慮內嵌初始化靜態字段,而不是明確使用靜態建構函式,因為運行時間能夠優化沒有明確定義靜態建構函式的類型效能。

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

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

另請參閱