實作抽象的基底類別
實作抽象的基底類別是設計來協助開發人員實作抽象類別和介面 (抽象) 的類別, 這些基底類別可為抽象提供某些實作細節,而且在某些情況下不需要繼承就可以使用。 例如,Collection<T> 可用來建立集合或是可以被繼承,以定義強型別集合類別。
下列程式碼範例將示範如何使用 Collection<T> 類別來建立強型別集合物件。
Public Class PointManager
Implements IEnumerable
Private pointCollection As Collection(Of Point) = New Collection(Of Point)
Public Sub AddPoint(ByVal p As Point)
pointCollection.Add(p)
End Sub
Public Function RemovePoint(ByVal p As Point) As Boolean
Return pointCollection.Remove(p)
End Function
Public Function GetEnumerator() As IEnumerator _
Implements IEnumerable.GetEnumerator
Return pointCollection.GetEnumerator
End Function
End Class
public class PointManager : IEnumerable
{
Collection<Point> pointCollection = new Collection<Point>();
public void AddPoint(Point p)
{
pointCollection.Add(p);
}
public bool RemovePoint(Point p)
{
return pointCollection.Remove(p);
}
public IEnumerator GetEnumerator()
{
return pointCollection.GetEnumerator();
}
}
下列程式碼範例將示範如何使用 Collection<T> 類別來定義強型別集合。
Public Class PointCollection
Inherits Collection(Of Point)
End Class
public class PointCollection : Collection<Point> {}
CollectionBase 類別是另一個 .NET Framework 基底類別範例, 此類別可協助開發人員實作非泛型集合。 CollectionBase 不能直接使用,與 Collection<T> 不同。
只有當實作抽象的基底類別為使用程式庫的開發人員增加極大的價值時,才應該以此程式庫的一部分之形式提供。 當基底類別只有對實作程式庫有幫助時,基底類別不應該是公開可見的。 若要於內部使用基底類別來簡化程式庫的開發,公用成員應該將工作委派給基底類別,而不是從它繼承。
請考慮讓基底類別變成抽象,即使是它不含任何抽象成員; 如此可清楚地讓使用者知道,此類別的設計只能從其他地方繼承。
請考慮將基底類別放在與主要案例 API 不同的命名空間內; 根據定義,基底類別是要供進階擴充性案例使用,而多數使用者不會有興趣。
如果基底類別要用於公用 API,請避免使用 Base 尾碼來命名此基底類別。
如果程式庫將此基底類別公開為傳回型別或參數型別,它不應該有 Base 尾碼。
Portions Copyright 2005 Microsoft Corporation. All rights reserved.
Portions Copyright Addison-Wesley Corporation. All rights reserved.
設計指引的詳細資訊,請參閱"框架設計準則:公約、 成語和可重複使用的模式。網路圖書館"書 Krzysztof Cwalina 和布拉德 · 艾布拉姆斯,2005年艾迪生 - 衛斯理,發表。