備註
此內容經Pearson Education, Inc.授權從架構設計指導方針:可重複使用 .NET 程式庫的慣例、習慣用語與範式 (第2版)轉載。 該版於2008年出版,該書自那以後已於 第三版全面修訂。 此頁面的某些資訊可能已過期。
嚴格來說,當另一個類別衍生自該類別時,類別會變成基類。 不過,為了本節的目的,基類是一種類別,主要是為了提供一般抽象概念,或其他類別在繼承時重複使用某些默認實作。 基類通常位於繼承階層的中間,在階層根目錄的抽象概念和底部的數個自定義實作之間。
它們可作為實作抽象概念的實作協助程式。 例如,Framework 為已排序項目的集合提供的架構抽象概念之一是 IList<T> 介面。 實作 IList<T> 並不簡單,因此 Framework 會提供數個基類,例如 Collection<T> 和 KeyedCollection<TKey,TItem>,做為實作自定義集合的協助程式。
基類通常不適合做為抽象概念,因為它們往往包含太多實作。 例如,Collection<T> 基類包含許多與實作相關的細節,因為它實作了非泛型 IList 介面(以更妥善地與非泛型集合整合),同時它是在其某個欄位中儲存於記憶體中的專案集合。
如先前所討論,基類可為需要實作抽象概念的使用者提供寶貴的協助,但同時,它們可能會造成重大責任。 它們會新增介面區並增加繼承階層的深度,因此在概念上使架構複雜化。 因此,只有在基類為架構的使用者提供重要價值時,才應該使用基類。 如果它們僅對架構的實作者提供價值,就應該避免使用。在此情況下,應強烈建議委派給內部實作,而不是繼承自基類。
✔️ 請考慮讓基類抽象化,即使它們不包含任何抽象成員也一樣。 這清楚地傳達給使用者,該類別的設計僅供作為繼承用。
✔️ 請考慮將基類放在與主線案例類型不同的命名空間中。 根據定義,基類適用於進階擴充性案例,因此對大多數用戶來說並不感興趣。
❌ 如果類別是用於公用 API,請避免使用 「Base」 後綴的基類。
© 2005年、2009年Microsoft公司部分。 保留所有權利。
經 Pearson Education, Inc. 許可重新刊登自 Krzysztof Cwalina 和 Brad Abrams 所著的 架構設計指導方針: 可重複使用的 .NET 程式庫慣例、慣用語和模式,第 2 版,2008 年 10 月 22 日由 Addison-Wesley Professional 發行,作為 Microsoft Windows 開發系列的一部分。