Compartir a través de


Clases base para implementar abstracciones

Las clases base para implementar abstracciones son clases diseñadas para ayudar a los desarrolladores a implementar clases abstractas e interfaces (abstracciones). Proporcionan algunos de los detalles de implementación de una abstracción y en algunos casos pueden utilizarse sin herencia. Por ejemplo, Collection<T> se puede utilizar para crear una colección o se puede heredar de ella para definir una clase de colección con establecimiento inflexible de tipos.

El ejemplo de código siguiente muestra cómo utilizar la clase Collection<T> para crear un objeto de colección con establecimiento inflexible de tipos.

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();
    }
}

El ejemplo de código siguiente muestra cómo utilizar la clase Collection<T> para definir un objeto de colección con establecimiento inflexible de tipos.

Public Class PointCollection
    Inherits Collection(Of Point)
End Class
public class PointCollection : Collection<Point> {}

La clase CollectionBase es otro ejemplo de clase base de .NET Framework. Esta clase ayuda a los desarrolladores a implementar colecciones no genéricas. A diferencia de Collection<T>, CollectionBase no se puede utilizar directamente.

Sólo se deben proporcionar clases base para implementar abstracciones como parte de una biblioteca cuando agreguen un valor significativo a los desarrolladores que utilicen la biblioteca. En el caso de que una clase base sólo ayude en la implementación de una biblioteca, la clase base no debería estar públicamente visible. Para utilizar internamente una clase base para simplificar el desarrollo de bibliotecas, los miembros públicos deberían delegar el trabajo en la clase base en lugar de heredar de ella.

Considere la posibilidad de hacer que las clases base sean abstractas incluso aunque no contengan ningún miembro abstracto. Esto indica claramente a los usuarios que la clase está diseñada únicamente para que se herede de ella.

Plantéese colocar las clases base en un espacio de nombres independiente del escenario principal de las interfaces API. Por definición, las clases base están pensadas para escenarios de extensibilidad avanzados y no son interesantes para la mayoría de usuarios.

Evite asignar nombres a las clases base con el sufijo Base si las clases están pensadas para ser utilizadas en interfaces API públicas.

Si la biblioteca expone la clase base como un tipo de valor devuelto o un tipo de parámetro, no debería tener el sufijo Base.

Portions Copyright 2005 Microsoft Corporation. Reservados todos los derechos.

Portions Copyright Addison-Wesley Corporation. Reservados todos los derechos.

Para obtener más información sobre las directrices de diseño, consulte “las instrucciones de diseño de Framework: Convenciones, frases realizadas y modelos para libro de bibliotecas reutilizables de .NET” de Krzysztof Cwalina y Brad Abrams, publicados por Addison-Wesley, 2005.

Vea también

Otros recursos

Instrucciones de diseño para desarrollar bibliotecas de clases

Diseñar extensibilidad