c# - sirve - Interfaces vs. clases abstractas
polimorfismo c# (4)
La verdadera pregunta es si usar interfaces o clases base. Esto ha sido cubierto antes.
En C #, una clase abstracta (una marcada con la palabra clave "abstracta") es simplemente una clase de la cual no se pueden crear instancias de objetos. Esto tiene un propósito diferente a simplemente hacer la distinción entre clases base e interfaces.
Esta pregunta ya tiene una respuesta aquí:
- ¿Cuándo debería elegir herencia sobre una interfaz cuando diseñe bibliotecas de clase C #? 6 respuestas
- Interfaz vs clase base 39 respuestas
En C #, ¿cuándo deberías usar interfaces y cuándo deberías usar clases abstractas? ¿Cuál puede ser el factor decisivo?
Las clases e interfaces abstractas son semánticamente diferentes, aunque su uso puede superponerse.
Una clase abstracta se usa generalmente como una base de construcción para clases similares. La implementación que es común para las clases puede ser en la clase abstracta.
Una interfaz generalmente se utiliza para especificar una capacidad para las clases, donde las clases no tienen que ser muy similares.
Las ventajas de una clase abstracta son:
- Posibilidad de especificar implementaciones predeterminadas de métodos
- Comprobación de funciones invariante añadida
- Tener un poco más de control en cómo se llaman los métodos de "interfaz"
- Capacidad de proporcionar un comportamiento relacionado o no relacionado con la interfaz para "libre"
Las interfaces son simplemente contratos de transferencia de datos y no tienen estas características. Sin embargo, suelen ser más flexibles ya que un tipo solo puede derivarse de una clase, pero pueden implementar cualquier cantidad de interfaces.
Otra cosa a tener en cuenta es que, dado que no hay herencia múltiple, si desea que una clase pueda implementar / heredar de su clase de interfaz / resumen, pero herede de otra clase base, use una interfaz.