CSharp
Tutorial CSharp: Herencia
CSharp herencia: técnicas y ejemplos. Aprende técnicas de herencia en CSharp mediante ejemplos prácticos y detallados.
Aprende CSharp GRATIS y certifícateLa herencia es una de las características fundamentales de la programación orientada a objetos (OOP) que permite crear una nueva clase a partir de una existente. En C#, la herencia funciona al permitir que una clase (la clase hija) herede los miembros y métodos de otra clase (la clase padre). El objetivo principal de la herencia es promover la reutilización del código y establecer una relación entre diferentes clases.
La herencia en C# se logra utilizando el operador ':' que indica que una clase está haciendo uso de la herencia.
Por ejemplo, considera dos clases: Animal (la clase base) y Perro (la clase derivada).
public class Animal
{
public void Comer()
{
Console.WriteLine("Comiendo...");
}
}
public class Perro : Animal
{
public void Ladrar()
{
Console.WriteLine("Ladrando...");
}
}
En este ejemplo, la clase Perro hereda los métodos de la clase Animal. Esto significa que la clase Perro ahora puede acceder al método Comer() que está definido en la clase Animal.
Perro perro = new Perro();
perro.Comer(); // Comiendo...
perro.Ladrar(); // Ladrado...
Una clase hija podrá acceder a cualquier campo, propiedad o método de la clase padre, siempre que dicho miembro tenga un modificador de acceso public
o protected
(de hecho, protected
sirve específicamente para permitir acceso sólo a la propia clase y a sus clases hijas). También será posible acceder a miembros con modificador de acceso internal
que se encuentren en el mismo ensamblado (assembly).
Llamada a constructor de clase padre
Cuando una clase hereda de otra en C#, el constructor de la clase hija debe encargarse de llamar al constructor de la clase padre antes de inicializar sus propios miembros. Esto se hace para garantizar que la inicialización de la clase padre se realice correctamente antes de continuar con la inicialización de la clase hija.
Para llamar al constructor de la clase padre, se utiliza la palabra clave base
seguida de los argumentos necesarios para el constructor de la clase padre. La llamada al constructor de la clase padre debe ser la primera instrucción dentro del constructor de la clase hija.
Supongamos que tenemos una clase Person
como clase padre:
public class Person
{
protected string name;
public Person(string name)
{
this.name = name;
}
}
Y una clase Employee
que hereda de Person
:
public class Employee : Person
{
private int employeeId;
public Employee(string name, int employeeId) : base(name)
{
this.employeeId = employeeId;
}
}
En este ejemplo, la clase Employee
tiene su propio constructor que toma dos argumentos: name
(que se pasa al constructor de la clase padre) y employeeId
. Para asegurarse de que el constructor de la clase padre (Person
) se ejecute antes de la inicialización de Employee
, llamamos al constructor de la clase padre usando base(name)
.
De esta manera, al crear una instancia de la clase Employee
, se inicializará primero la parte de la clase Person
y luego la parte específica de la clase Employee
. Esto asegura que todos los miembros de ambas clases estén correctamente inicializados. La llamada al constructor de la clase padre con base
es fundamental en el proceso de herencia para mantener la consistencia y coherencia en la jerarquía de clases.
Herencia múltiple a través de interfaces
C# solo permite la herencia simple, lo que significa que una clase en C# solo puede heredar de una única clase padre. Aunque C# no soporta directamente la herencia múltiple como otros lenguajes OOP, puede simularse utilizando interfaces o patrones de diseño.
Una interfaz es una definición de un contrato que especifica los miembros (métodos, propiedades, eventos) que una clase concreta debe implementar. Permite establecer una conexión entre distintas clases, independientemente de su jerarquía de herencia, para asegurar que cumplan cierto conjunto de funcionalidades comunes.
C# permite que una clase implemente múltiples interfaces. Aunque técnicamente no es herencia múltiple, se puede utilizar para obtener un efecto similar.
interface IPadre1
{
void MetodoPadre1();
}
interface IPadre2
{
void MetodoPadre2();
}
public class Hijo : IPadre1, IPadre2
{
public void MetodoPadre1()
{
Console.WriteLine("Método de IPadre1");
}
public void MetodoPadre2()
{
Console.WriteLine("Método de IPadre2");
}
}
De esta manera, a pesar de que C# no permite directamente la herencia múltiple, puede lograrse un resultado similar al heredar de múltiples interfaces.
Ejercicios de esta lección Herencia
Evalúa tus conocimientos de esta lección Herencia con nuestros retos de programación de tipo Test, Puzzle, Código y Proyecto con VSCode, guiados por IA.
Todas las lecciones de CSharp
Accede a todas las lecciones de CSharp y aprende con ejemplos prácticos de código y ejercicios de programación con IDE web sin instalar nada.
Introducción A C#
Sintaxis
Creación De Proyecto C#
Sintaxis
Variables Y Constantes
Sintaxis
Tipos De Datos
Sintaxis
Operadores
Sintaxis
Control De Flujo
Sintaxis
Funciones
Sintaxis
Clases Y Encapsulación
Programación Orientada A Objetos
Objetos
Programación Orientada A Objetos
Constructores Y Destructores
Programación Orientada A Objetos
Herencia
Programación Orientada A Objetos
Polimorfismo
Programación Orientada A Objetos
Excepciones
Excepciones
Arrays Y Listas
Colecciones Y Linq
Diccionarios
Colecciones Y Linq
Conjuntos, Colas Y Pilas
Colecciones Y Linq
Uso De Consultas Linq
Colecciones Y Linq
Delegados
Programación Asíncrona
Eventos
Programación Asíncrona
Lambdas
Programación Asíncrona
Uso De Async Y Await
Programación Asíncrona
Tareas
Programación Asíncrona
En esta lección
Objetivos de aprendizaje de esta lección
- Comprender el concepto de herencia en C# y cómo facilita la reutilización de código y la relación entre clases.
- Aprender a definir una clase hija que hereda de una clase padre utilizando el operador ':'.
- Conocer cómo se acceden a los miembros y métodos de la clase padre desde la clase hija.
- Entender cómo se llama al constructor de la clase padre desde la clase hija utilizando la palabra clave
base
. - Familiarizarse con el uso de interfaces para lograr una funcionalidad similar a la herencia múltiple en C#.