Поделиться через


Базовые классы для реализации абстракций

Базовые классы для реализации абстракций – это классы, созданные в помощь разработчикам для реализации абстрактных классов и интерфейсов (абстракций). Они предоставляют некоторые детали реализации для абстракций и в некоторых случаях могут быть использованы без наследования. Например, класс 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. По определению, базовые классы предназначены для сложных расширенных сценариев и не интересны большинству пользователей.

Избегайте наименования базового класса с использованием суффикса Base, если класс предназначен для использования в публичных API.

Если библиотека представляет базовый класс как возвращаемый тип или тип параметра, он не должен иметь суффикс Base.

Охраняется авторским правом Copyright 2005 Microsoft Corporation. Все права защищены.

Фрагменты — © Addison-Wesley Corporation. Все права защищены.

Для дополнительной информации о разработке руководящих принципов, смотрите "руководства по разработке рамок: Конвенций, идиомы и шаблоны для повторного использования.NET библиотек"книга, Кшиштоф Cwalina и Брэд Абрамс, опубликованных Addison-Wesley, 2005 года.

См. также

Другие ресурсы

Руководство по разработке библиотек классов

Разработка с обеспечением расширяемости