Clase abstracta e interfaz en C #

Anonim

Una clase abstracta se parece mucho a una interfaz, pero el concepto es un poco confuso para los principiantes de OOP. Conceptualmente, una clase abstracta se parece a una interfaz, por supuesto, sin ninguna implementación, sin embargo, tienen su parte justa de las diferencias. Si bien una clase abstracta puede implementarse parcial o totalmente, una interfaz debe implementarse completamente. Bueno, la diferencia más notable entre los dos es que una clase abstracta puede tener una implementación predeterminada, mientras que una interfaz es solo la definición de métodos que contiene solo las declaraciones de los miembros. Vamos a discutir los aspectos teóricos de ambos en detalle.

¿Que es una clase abstracta?

Una clase abstracta es un tipo especial de clase que actúa como una base de otras clases y no puede ser instanciada. La lógica de implementación de una clase abstracta es proporcionada por sus clases derivadas. Para hacer que una clase sea abstracta, se usa el modificador "abstracto", lo que significa que es necesario implementar alguna implementación faltante en la clase derivada de ella. Contiene miembros abstractos y no abstractos. Una clase abstracta está diseñada para proporcionar una funcionalidad básica que puede ser compartida y anulada por múltiples clases derivadas. Es útil para evitar cualquier tipo de duplicación de código. Se parecen mucho a las interfaces pero con funcionalidad añadida.

¿Qué es una interfaz?

Una interfaz, por otro lado, no es una clase que contiene solo la firma de funcionalidad. Es un patrón sin implementación. En términos conceptuales, es solo la definición de métodos que contiene solo la declaración de los miembros. Es un shell vacío que no contiene la implementación de sus miembros. Es como una clase base abstracta que solo contiene miembros abstractos como métodos, eventos, indexadores, propiedades, etc. No se puede instanciar directamente y sus miembros pueden ser implementados por cualquier clase. Además, múltiples clases pueden ser implementadas por una clase, sin embargo, una clase solo puede heredar una sola clase.

Clase abstracta vs. Interfaz: diferencia entre la clase abstracta y la interfaz en C #

  1. Herencia múltiple - Una clase solo puede usar una clase abstracta, por lo tanto, no se admite la herencia múltiple. Una interfaz, por otro lado, puede admitir herencia múltiple, lo que significa que una clase puede heredar cualquier cantidad de herencias.
  2. Definición de Clase abstracta e interfaz en C #- Una clase abstracta es un tipo especial de clase que puede contener definición sin implementación. La lógica de implementación es proporcionada por sus clases derivadas. Puede tener métodos tanto abstractos como no abstractos. Una interfaz, por otro lado, es solo un patrón que no puede hacer nada. Técnicamente, es solo una cáscara vacía.
  3. Implementación - Una clase abstracta puede contener tanto definición como su implementación. Es una clase incompleta que no puede ser instanciada. Una interfaz solo puede tener la firma de la funcionalidad sin ningún código.
  4. Modificadores de acceso - Una clase abstracta puede tener varios modificadores de acceso como subs, funciones, propiedades, etc., mientras que una interfaz no puede tener modificadores de acceso y todos los métodos deben definirse implícitamente como públicos.
  5. Homogeneidad - Una clase abstracta se usa para implementaciones del mismo tipo, comportamiento y estado, mientras que una interfaz se usa para implementaciones que comparten solo firmas de métodos.
  6. Declaración - Una clase abstracta actúa como una clase base para todas las demás clases, por lo que puede declarar o usar cualquier variable, mientras que una interfaz no tiene permitido declarar ninguna variable.
  7. Declaración del constructor - Si bien una clase abstracta puede tener una declaración de constructor, una interfaz no puede tener una declaración de constructor.
  8. Núcleo vs. Periférico - Una clase abstracta se usa para definir la identidad central de una clase y se puede usar para objetos del mismo tipo de datos. Una interfaz, por otro lado, se utiliza para definir la capacidad periférica de una clase.
  9. Rígido vs. Flexible - Una clase abstracta es más flexible en términos de funcionalidad, al menos desde la perspectiva de un desarrollador, mientras que una interfaz es más rígida.

Resumen clase vs interfaz: forma de tabla

Clase abstracta

Interfaz

Una clase abstracta puede tener todos los modificadores de acceso para la declaración de funciones, subs y propiedades de los miembros. No se permite que una interfaz tenga modificadores de acceso para la declaración de funciones, subs, propiedades, etc. de los miembros. Se supone que todos los miembros son implícitamente públicos.
Una clase puede, como máximo, usar solo una clase abstracta. Una clase puede heredar cualquier número de interfaces.
La herencia múltiple no se admite en la clase abstracta. Una interfaz puede soportar herencia múltiple.
Técnicamente, es una clase que puede o no contener tanto la definición como su implementación. Una interfaz solo puede tener la firma de la funcionalidad, por lo que es básicamente un shell vacío.
Una clase abstracta puede contener miembros. consts, métodos definidos y stubs de métodos. Una interfaz solo puede contener métodos y consts.
Define la identidad central de una clase y se utiliza para describir objetos del mismo tipo de datos. Se utiliza para describir las habilidades periféricas de una clase.
Los miembros de una clase abstracta no pueden ser estáticos a menos que sea un Miembro Completo. Los miembros de una interfaz no pueden ser estáticos.
Es ideal para implementaciones del mismo tipo y comportamiento común. Es mejor usar interfaces si varias implementaciones comparten solo firmas de métodos.
Puede tener declaración de constructor. No puede tener declaración de constructor.
Una clase abstracta tiene campos e interpretaciones predefinidos. Los campos no se pueden definir en las interfaces.
Puede tener métodos tanto abstractos como no abstractos. Sólo puede tener métodos abstractos.

Resumen

¿Cuál es la diferencia entre una clase abstracta y una interfaz? Esta es probablemente una de las preguntas más frecuentes en cualquier entrevista técnica. Es probable que encuentre una gran cantidad de información sobre clases abstractas e interfaces en cualquier tutorial de C #, sin embargo, entender la diferencia entre los dos es una parte difícil. Puede consolidar toda la información que puede encontrar y aún no puede obtener suficiente. Bueno, conceptualmente, ambos son los términos más importantes en la programación y son los mismos, sin embargo, difieren mucho en términos de funcionalidad. Mientras que una clase abstracta es un tipo especial de clase que actúa como base para otras clases, una interfaz, por otro lado, es solo un shell vacío con solo declaraciones de miembros.