C# herencia múltiple

C# herencia múltiple

Los programadores pueden usar múltiples herencias para construir clases que integren características de varias clases y jerarquías. También es útil cuando una clase infantil quiere combinar múltiples contratos de clase base. La herencia múltiple no es compatible con C# porque los programadores creen que agrega una complejidad excesiva al lenguaje al tiempo que no proporciona suficiente beneficio. En el lenguaje de programación de C#, las clases solo pueden heredar de una clase padre, que se conoce como herencia única.

Sin embargo, se pueden usar interfaces o una combinación de clase e interfaz (s), con la (s) interfaz (s) seguida por el nombre de la clase en la firma. Este artículo muestra cómo se puede lograr la herencia múltiple en C# utilizando diferentes enfoques.

¿Qué son las interfaces C#?

La herencia múltiple no es factible con las clases, como sabemos, pero se puede lograr con interfaces cuando se usa la palabra clave de la interfaz. La interfaz solo proporciona las definiciones de métodos, propiedades, eventos e indexadores, pero no proporciona ninguna implementación del código. No podemos agregar modificadores de acceso a los miembros de la interfaz, ya que son implícitamente públicos y abstractos. No se permiten variables, miembros constantes, constructores, destructores y miembros estáticos en una interfaz.

Importancia de las interfaces de C#

Una interfaz no es la misma que una clase. Solo tiene firmas de método. No se puede crear ya que no tiene ninguna implementación. Las clases derivadas de él ofrecen la lógica de implementación. Una interfaz a menudo se considera una clase abstracta pura. Sin embargo, utilizar una interfaz en lugar de una clase abstracta tiene la ventaja de admitir múltiples herencias.

Cómo implementar interfaces para C# herencia múltiple

En el lenguaje C#, existen numerosos enfoques para lograr la funcionalidad de herencia múltiple. Para conocer los conceptos básicos del uso de interfaces para implementar múltiples herencias, tenemos algunos programas en las siguientes ilustraciones:

Ejemplo #1: Implementación de la herencia de clase múltiple

Estamos tratando de implementar la herencia múltiple en la siguiente clase. Inicialmente, tratamos de heredar las propiedades de la primera clase principal y la segunda clase principal en la clase infantil. Sin embargo, el compilador lanzará el error de tiempo de ejecución ya que C# no admite la herencia de clase múltiple directamente.

Incluimos las bibliotecas de sistemas al comienzo del código. Después de eso, creamos una clase principal, "frutas", y también definimos un método de la clase como "myfruits". En el método "myfruits", creamos una lista como "mylist" y agregamos diferentes elementos a la lista utilizando el método ADD. El bucle foreach se usa para iterar sobre cada elemento en la lista y asignar los elementos de la lista a una nueva variable, "elementos". Luego, creamos otra clase principal, "frutas" y proporcionamos el método "colores" para la implementación. También agregamos los elementos en la lista de la clase "colores" como en la clase anterior.

Ahora, tenemos una clase infantil llamada "fruitdetails", y esta clase de niños hereda las dos clases de padres dadas. Al final, tenemos la clase principal "GetDetails", en la que tenemos un método principal, y hemos creado el objeto de la clase infantil "fruitsdetails" en el método principal. Estos objetos invocan el método de clase principal aquí, lo que causará ambigüedad en el código.

En el tiempo de compilación, el programa anterior arroja una excepción de que "las clases no pueden tener múltiples clases base", como se muestra en la siguiente imagen:

Ejemplo #2: Implementación de la interfaz para la herencia múltiple

Aunque C# no implementa múltiples herencias con clases, podemos lograrlo utilizando la interfaz. Aunque las interfaces dan una abstracción completa, no pueden incluir métodos específicos.

En el código anterior, creamos la interfaz con la palabra clave "interfaz", y la interfaz se le da el nombre "interfaz11". Solo creamos un método "nombres" y nada más en la interfaz. Luego, definimos una clase de padres, "estudiante", para la cual creamos una interfaz. En la clase principal, proporcionamos la implementación del método "nombres". En el método "nombres", tenemos una lista de matrices representadas como una "lista" donde agregamos nombres aleatorios utilizando el método ADD. La línea de escritura imprime los elementos de la lista. El bucle foreach se usa aquí para iterar sobre cada elemento de lista con la ayuda de los "valores" variables recién creados.

Luego, creamos otra interfaz, "Interface2", para la segunda clase principal. La interfaz solo tiene el método "sujetos". Tenemos nuestra segunda clase principal, que implementa el método de interfaz "sujetos". Luego, agregamos los elementos en la lista como en la primera clase principal. A continuación, tenemos la clase infantil "Detalles", que hereda las dos interfaces especificadas, "Interface1" e "Interface2". En la clase infantil, creamos los objetos para las clases principales y accedimos a los métodos de "nombres" y "sujetos" directamente utilizando estos objetos. Los métodos de "nombres" y "sujetos" no se modifican ya que las interfaces son heredadas por la clase infantil. Al final del código, tenemos una clase principal, "demostración", para declarar los objetos de la clase infantil y mostrar los resultados.

Los siguientes son los resultados que obtuvimos de la implementación de la herencia de múltiples clases utilizando interfaces:

Ejemplo #3: La implementación de la interfaz hereda otra interfaz

La herencia de una interfaz a otra es posible en C#. Cuando una clase define una interfaz hereditaria, debe implementar todos los miembros declarados dentro de la cadena de herencia. Tenga en cuenta que si una clase usa una interfaz, todos los métodos proporcionados por esa interfaz deben implementarse junto con los métodos de interfaz base. De lo contrario, el compilador arroja un error. Cuando se especifican una interfaz derivada y una base, entonces el nombre del miembro de la interfaz derivada oculta el nombre del miembro de la interfaz base.

En el código anterior, declaramos una interfaz "libros" y creamos un método "book_no" en la interfaz. Tenga en cuenta que no hemos definido un método con ningún especificador de acceso. Por defecto, los métodos de interfaz son públicos. Si le asignamos algún especificador de acceso, el compilador arroja un error. Luego, implementamos otra interfaz, "detalles", que hereda la interfaz "libros". También tenemos un método para esta interfaz. La clase se crea con el nombre "Autor", para el cual implementamos las interfaces anteriores. La clase solo hereda la interfaz "detalles", pero heredamos métodos de ambas interfaces aquí. Al final, definimos una clase de clase de controlador "demostración", en la que creamos un objeto para la clase "autor" y llamamos a estos objetos para acceder a los métodos de clase "autor". Luego, pasamos los valores a estos métodos.

La siguiente es la salida que obtenemos de la herencia de la interfaz a otra interfaz:

Conclusión

Discutimos el concepto de herencia múltiple en C#. Y llegamos a saber que en C, solo se permite una herencia única, aunque se puede lograr una herencia múltiple utilizando simultáneamente una o más interfaces. Tenemos una definición clara de la interfaz junto con su importancia. También implementamos la interfaz en el código de ejemplo para demostrar cómo la interfaz se puede usar en C#. Además, utilizar interfaces es muy útil ya que ocultan la implementación de una clase del mundo exterior. Ahora, espero que hayas aprendido sobre la herencia múltiple en C#. Más temas relacionados sobre C# están disponibles en Linux Sugerencia.