Nota
O acceso a esta páxina require autorización. Pode tentar iniciar sesión ou modificar os directorios.
O acceso a esta páxina require autorización. Pode tentar modificar os directorios.
Nota:
Este contenido se reimprime con permiso de Pearson Education, Inc. de Directrices de diseño de frameworks: Convenciones, expresiones y patrones para bibliotecas reutilizables de .NET, 2ª edición. Esa edición fue publicada en 2008, y el libro ha sido totalmente revisado en la tercera edición. Parte de la información de esta página puede estar obsoleta.
Aunque la mayoría de las API se modelan mejor mediante clases y estructuras, hay casos en los que las interfaces son más adecuadas o son la única opción.
CLR no admite varias herencias (es decir, las clases CLR no pueden heredar de más de una clase base), pero permite que los tipos implementen una o varias interfaces además de heredar de una clase base. Por lo tanto, las interfaces a menudo se usan para lograr el efecto de la herencia múltiple. Por ejemplo, IDisposable es una interfaz que permite que los tipos admitan la eliminación independientemente de cualquier otra jerarquía de herencia en la que deseen participar.
La otra situación en la que definir una interfaz es adecuada es para crear una interfaz común que pueda ser soportada por varios tipos, incluidos algunos tipos de valor. Los tipos de valor no pueden heredar de tipos distintos de ValueType, pero pueden implementar interfaces, por lo que el uso de una interfaz es la única opción para proporcionar un tipo base común.
✔️ Defina una interfaz si necesita que una API común sea compatible con un conjunto de tipos que incluya tipos de valor.
✔️ PLANTÉESE la posibilidad de definir una interfaz si necesita admitir su funcionalidad en tipos que ya heredan de algún otro tipo.
❌ EVITE usar interfaces de marcador (interfaces sin miembros).
Si necesita marcar una clase como tener una característica específica (marcador), en general, use un atributo personalizado en lugar de una interfaz.
✔️ ASEGÚRATE de proporcionar al menos un tipo que implemente una interfaz.
Esto ayuda a validar el diseño de la interfaz. Por ejemplo, List<T> es una implementación de la IList<T> interfaz .
✔️ DEBE proporcionar al menos una API que consuma cada interfaz que defina (un método que toma la interfaz como un parámetro o una propiedad con el tipo de interfaz).
Esto ayuda a validar el diseño de la interfaz. Por ejemplo, List<T>.Sort consume la System.Collections.Generic.IComparer<T> interfaz .
❌ NO agregue miembros a una interfaz que se haya enviado anteriormente.
Si lo hace, interrumpiría las implementaciones de la interfaz. Debe crear una nueva interfaz para evitar problemas de control de versiones.
Excepto en las situaciones descritas en estas instrucciones, debe elegir clases en general en lugar de interfaces en el diseño de bibliotecas reutilizables de código administrado.
© Partes 2005, 2009 de Microsoft Corporation. Todos los derechos reservados.
Reimpreso con permiso de Pearson Education, Inc. de Framework Design Guidelines: Convenciones, Idiomas y Patrones para Bibliotecas .NET Reusables, 2ª Edición por Krzysztof Cwalina y Brad Abrams, publicado el 22 de octubre de 2008 por Addison-Wesley Professional como parte de la Serie Desarrollo de Microsoft Windows.