共用方式為


介面設計

備註

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

雖然大部分的 API 最適合使用類別和結構進行模型化,但在某些情況下,介面更合適或是唯一的選項。

CLR 不支援多重繼承(亦即 CLR 類別無法繼承自多個基類),但除了繼承自基類之外,它還是允許類型實作一或多個介面。 因此,介面通常用來達到多重繼承的效果。 例如,IDisposable 是一個介面,允許型別支援可處置性,而不依賴於他們想參與的任何其他繼承階層。

定義介面的另一種情況是建立可由數種類型支援的通用介面,包括一些實值型別。 實值型別無法繼承自 以外的 ValueType型別,但它們可以實作介面,因此使用介面是唯一提供通用基底型別的選項。

✔️ 如果您需要一組包含實值型別的型別支援一些常見的 API,請定義介面。

✔️ 如果您需要在已經繼承自某些其他類型的類型上支援其功能,請考慮定義介面。

❌ 避免使用標記介面(沒有成員的介面)。

如果您需要將類別標示為具有特定特性(標記),一般而言,請使用自定義屬性而不是介面。

✔️ DO 提供至少一種類型,這是介面的實作。

這樣做有助於驗證介面的設計。 例如,List<T>IList<T> 介面的實作。

✔️ 請提供至少一個 API 以使用您定義的每個介面(方法將介面作為參數,或屬性類型為該介面)。

這樣做有助於驗證介面設計。 例如, List<T>.Sort 取用 System.Collections.Generic.IComparer<T> 介面。

❌ 請勿將成員加入至先前已發佈的介面。

這樣做會中斷 介面的實作。 您應該建立新的介面,以避免版本設定問題。

除了這些指導方針中所述的情況之外,在設計可重複使用的受控代碼庫時,一般應選擇類別而不是介面。

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

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

另請參閱