Compartir a través de


Tipos e interfaces abstractos

Los tipos abstractos y las interfaces son mecanismos para especificar abstracciones de programación. Una abstracción especifica un contrato al que se deben adherir los herederos o implementadores. Los tipos abstractos tienen la opción de proporcionar detalles de implementación; las interfaces no pueden proporcionar ningún detalle de implementación.

No proporcione abstracciones a menos que estén probadas desarrollando algunas implementaciones concretas y API que consuman las abstracciones.

Si utiliza abstracciones sin probarlas en situaciones reales, lo más probable es que pase por alto problemas de diseño que son difíciles o imposibles de corregir sin introducir problemas de compatibilidad en futuras versiones.

Elija cuidadosamente entre una clase abstracta y una interfaz al diseñar una abstracción.

Para obtener una discusión detallada sobre cómo seleccionar un tipo abstracto o una interfaz, vea Elegir entre clases e interfaces.

Considere proporcionar pruebas de referencia para implementaciones concretas de abstracciones. Tales comprobaciones deberían permitir a los usuarios probar si sus implementaciones cumplen correctamente el contrato.

Las pruebas de referencia le permiten comprobar que ha implementado correctamente una interfaz. Por ejemplo, una prueba para ICollection<T> puede comprobar que, tras haber llamado dos veces al método Add en una instancia que implementa la interfaz, la propiedad Count se incrementa en dos unidades.

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