Herencias en C#
La herencia en C# es un mecanismo que permite definir nuevas clases basadas en una clase existente, a la que se llama clase base o superclase. La clase nueva se llama clase derivada o subclase.
La clase derivada hereda todos los miembros de la clase base y puede añadir nuevos miembros o modificar los miembros heredados.
Al heredar de una clase, la subclase adquiere todos los campos, métodos y propiedades de la clase base, pero puede tener una implementación distinta de los mismos.
La herencia también puede reducir la cantidad de código necesario para definir nuevas clases, ya que se pueden heredar miembros y comportamientos de una clase existente en lugar de crearlos desde cero.
La herencia en C# se implementa mediante la palabra clave «class» seguida del nombre de la subclase y la palabra clave « : » seguida del nombre de la clase base. Por ejemplo:
public class Subclase : ClaseBase
{
// Código de la subclase
}
Lenguaje del código: C# (cs)
En este ejemplo, la clase «Subclase» hereda de la clase «ClaseBase«. La subclase tiene acceso a todos los miembros públicos y protegidos de la clase base, y puede añadir nuevos miembros o modificar los miembros heredados.
Es importante tener en cuenta que no todos los miembros de una clase base son heredables. Los miembros privados y los constructores no se pueden heredar.
Aquí tienes dos ejemplos de herencia en C#:
Ejemplo 1:
// Definición de la clase base
public class Animal {
public string Name { get; set; }
public int Age { get; set; }
public virtual void MakeSound() {
Console.WriteLine("Some animal sound");
}
}
// Definición de la clase derivada
public class Dog : Animal {
public string Breed { get; set; }
public override void MakeSound() {
Console.WriteLine("Woof!");
}
}
// Uso de las clases
var animal = new Animal();
animal.Name = "Generic animal";
animal.Age = 5;
animal.MakeSound(); // Output: Some animal sound
var dog = new Dog();
dog.Name = "Fido";
dog.Age = 3;
dog.Breed = "Poodle";
dog.MakeSound(); // Output: Woof!
Lenguaje del código: C# (cs)
En este ejemplo, se define una clase base Animal
con dos propiedades (Name
y Age
) y un método virtual MakeSound
. Luego, se define una clase derivada Dog
que hereda de Animal
y agrega una propiedad adicional (Breed
) y sobrescribe el método MakeSound
.
Finalmente, se crean instancias de ambas clases y se muestra cómo se utilizan las propiedades y métodos.
Ejemplo 2:
// Definición de la clase base
public class Shape {
public double Width { get; set; }
public double Height { get; set; }
public virtual double Area() {
return Width * Height;
}
}
// Definición de las clases derivadas
public class Rectangle : Shape {
// No hay necesidad de definir Width y Height aquí, ya que son heredados de la clase base
}
public class Triangle : Shape {
public override double Area() {
return base.Area() / 2;
}
}
// Uso de las clases
var rectangle = new Rectangle();
rectangle.Width = 10;
rectangle.Height = 5;
Console.WriteLine(rectangle.Area()); // Output: 50
var triangle = new Triangle();
triangle.Width = 10;
triangle.Height = 5;
Console.WriteLine(triangle.Area()); // Output: 25
Lenguaje del código: C# (cs)
En este ejemplo, se define una clase base Shape
con dos propiedades (Width
y Height
) y un método virtual Area
que devuelve el área de la forma. Luego, se definen dos clases derivadas Rectangle
y Triangle
que heredan de Shape
.
Rectangle
no tiene que definir las propiedades Width
y Height
porque son heredadas de la clase base, y Triangle
sobrescribe el método Area
para calcular el área de un triángulo.
Finalmente, se crean instancias de ambas clases y se muestra cómo se utiliza el método Area
.