備註
此內容經Pearson Education, Inc.授權從架構設計指導方針:可重複使用 .NET 程式庫的慣例、習慣用語與範式 (第2版)轉載。 該版於2008年出版,該書自那以後已於 第三版全面修訂。 此頁面的某些資訊可能已過期。
巢狀類型是在另一種類型範圍內定義的類型,稱為封入類型。 巢狀類型可以存取其封入類型的所有成員。 例如,它可以存取封入類型中定義的私用欄位,以及封入類型之所有上階中定義的受保護欄位。
一般而言,巢狀類型應該謹慎使用。 這有幾個原因。 有些開發人員並不完全熟悉概念。 例如,這些開發人員可能會有宣告巢狀類型變數語法的問題。 巢狀類型也與其封入類型緊密結合,因此不適合為一般用途類型。
巢狀類型最適合協助表現其封閉類型的實作細節。 使用者很少必須宣告巢狀類型的變數,而且幾乎永遠不需要明確具現化巢狀類型。 例如,集合的列舉器可以是該集合的內嵌類型。 列舉值通常是由其封入類型具現化,而且因為許多語言支援 foreach 語句,因此列舉值變數很少需要由使用者宣告。
✔️ 當巢狀類型與其外部類型之間的關聯性是需要成員可訪問性語意時,請使用巢狀類型。
❌ 請勿使用公用巢狀類型作為邏輯群組構造;請使用命名空間。
❌ 避免公開暴露的巢狀類型。 唯一的例外狀況是,如果巢狀類型的變數只有在罕見的案例中才需要宣告,例如子類別化或其他進階自定義案例。
❌ 如果型別可能在其包含的型別之外被引用,請勿使用巢狀型別。
例如,傳遞至類別上定義之方法的列舉不應定義為類別中的嵌套型別。
❌ 如果需要由用戶端程式代碼具現化,請勿使用巢狀類型。 如果一個類型具有公用建構函式,它可能不應該被嵌套。
如果類型可以具現化,這似乎表示該類型本身在架構中有一個位置(您可以自行建立它、使用它,並且不需使用外部類型加以終結),因此不應該巢狀化。 內部類型不應在外部類型外部廣泛重複使用,而不需要與外部類型有任何關聯性。
❌ DO NOT 將巢狀類型定義為介面的成員。 許多語言不支援這類建構。
© 2005年、2009年Microsoft公司部分。 保留所有權利。
經 Pearson Education, Inc. 許可重新刊登自 Krzysztof Cwalina 和 Brad Abrams 所著的 架構設計指導方針: 可重複使用的 .NET 程式庫慣例、慣用語和模式,第 2 版,2008 年 10 月 22 日由 Addison-Wesley Professional 發行,作為 Microsoft Windows 開發系列的一部分。