共用方式為


在類別和介面之間選擇

介面會針對實作者必須提供的一組成員定義簽章; 介面無法為這些成員提供實作的細節。 例如,ICollection 介面會定義與處理集合有關的成員, 每一個實作此介面的類別都必須為這些成員提供實作的細節。 類別可以實作多個介面。

類別可為每一個成員定義成員簽章和實作細節兩者。 Abstract (Visual Basic 中的 MustInherit) 類別的行為可能會與介面或一般類別類似,因為這些類別可以定義成員,也可以提供實作的細節,但是並不一定要這麼做。 如果抽象類別未提供實作的細節,必須要有繼承自抽象類別的具象類別,才能提供實作。

雖然抽象類別和介面都可支援將合約與實作區隔,但是介面無法在較新版本中指定新的成員,而抽象類別則可依需要加入成員來支援其他功能。

定義類別要優先於介面。

在較新版本的程式庫中,您可以安心地將新的成員加入到類別,但是一定要破壞現有的程式碼,才可以將成員加入到介面中。

要使用抽象 (Visual Basic 中為 MustInherit) 類別而非介面,才能將合約與實作取消結合。

如果您需要提供實值型別的多型階層架構,則要定義介面。

實值型別必須繼承自 ValueType,而且只能繼承自 ValueType,所以實值型別不能使用類別將合約與實作區隔。 在這種情況下,如果實值型別需要有多型行為,則必須使用介面。

請考慮定義介面,以達到與多個繼承類似的效果。

如果型別必須實作多個合約,或是合約適用於各種不同的型別,則請使用介面。 例如,IDisposable 是由用於許多不同案例中的型別所實作。 要求繼承自基底類別的類別必須可以處置,將會讓類別階層架構變得過於沒彈性。 應該讓其資料流為主的合約繼承自其父類別的類別 (例如 MemoryStream),無法在做這項處理的同時,也維持可以處置的狀態。

Portions Copyright 2005 Microsoft Corporation. All rights reserved.

Portions Copyright Addison-Wesley Corporation. All rights reserved.

設計指引的詳細資訊,請參閱"框架設計準則:公約、 成語和可重複使用的模式。網路圖書館"書 Krzysztof Cwalina 和布拉德 · 艾布拉姆斯,2005年艾迪生 - 衛斯理,發表。

請參閱

概念

在類別和結構之間選擇

其他資源

型別設計方針

開發類別庫的設計方針