C # - Herencia
Uno de los conceptos más importantes de la programación orientada a objetos es la herencia. La herencia nos permite definir una clase en términos de otra clase, lo que facilita la creación y el mantenimiento de una aplicación. Esto también brinda la oportunidad de reutilizar la funcionalidad del código y acelera el tiempo de implementación.
Al crear una clase, en lugar de escribir miembros de datos y funciones de miembros completamente nuevos, el programador puede designar que la nueva clase debe heredar los miembros de una clase existente. Esta clase existente se llamabase clase, y la nueva clase se conoce como el derived clase.
La idea de herencia implementa la IS-Arelación. Por ejemplo, mamíferoIS A animal, perro IS-A mamífero por lo tanto perro IS-A animal también, y así sucesivamente.
Clases base y derivadas
Una clase puede derivarse de más de una clase o interfaz, lo que significa que puede heredar datos y funciones de varias clases o interfaces base.
La sintaxis utilizada en C # para crear clases derivadas es la siguiente:
<acess-specifier> class <base_class> {
...
}
class <derived_class> : <base_class> {
...
}
Considere una clase base Shape y su clase derivada Rectangle -
using System;
namespace InheritanceApplication {
class Shape {
public void setWidth(int w) {
width = w;
}
public void setHeight(int h) {
height = h;
}
protected int width;
protected int height;
}
// Derived class
class Rectangle: Shape {
public int getArea() {
return (width * height);
}
}
class RectangleTester {
static void Main(string[] args) {
Rectangle Rect = new Rectangle();
Rect.setWidth(5);
Rect.setHeight(7);
// Print the area of the object.
Console.WriteLine("Total area: {0}", Rect.getArea());
Console.ReadKey();
}
}
}
Cuando se compila y ejecuta el código anterior, produce el siguiente resultado:
Total area: 35
Inicializando la clase base
La clase derivada hereda las variables y los métodos de los miembros de la clase base. Por lo tanto, el objeto de superclase debe crearse antes de que se cree la subclase. Puede dar instrucciones para la inicialización de superclase en la lista de inicialización de miembros.
El siguiente programa demuestra esto:
using System;
namespace RectangleApplication {
class Rectangle {
//member variables
protected double length;
protected double width;
public Rectangle(double l, double w) {
length = l;
width = w;
}
public double GetArea() {
return length * width;
}
public void Display() {
Console.WriteLine("Length: {0}", length);
Console.WriteLine("Width: {0}", width);
Console.WriteLine("Area: {0}", GetArea());
}
}//end class Rectangle
class Tabletop : Rectangle {
private double cost;
public Tabletop(double l, double w) : base(l, w) { }
public double GetCost() {
double cost;
cost = GetArea() * 70;
return cost;
}
public void Display() {
base.Display();
Console.WriteLine("Cost: {0}", GetCost());
}
}
class ExecuteRectangle {
static void Main(string[] args) {
Tabletop t = new Tabletop(4.5, 7.5);
t.Display();
Console.ReadLine();
}
}
}
Cuando se compila y ejecuta el código anterior, produce el siguiente resultado:
Length: 4.5
Width: 7.5
Area: 33.75
Cost: 2362.5
Herencia múltiple en C #
C# does not support multiple inheritance. Sin embargo, puede utilizar interfaces para implementar herencia múltiple. El siguiente programa demuestra esto:
using System;
namespace InheritanceApplication {
class Shape {
public void setWidth(int w) {
width = w;
}
public void setHeight(int h) {
height = h;
}
protected int width;
protected int height;
}
// Base class PaintCost
public interface PaintCost {
int getCost(int area);
}
// Derived class
class Rectangle : Shape, PaintCost {
public int getArea() {
return (width * height);
}
public int getCost(int area) {
return area * 70;
}
}
class RectangleTester {
static void Main(string[] args) {
Rectangle Rect = new Rectangle();
int area;
Rect.setWidth(5);
Rect.setHeight(7);
area = Rect.getArea();
// Print the area of the object.
Console.WriteLine("Total area: {0}", Rect.getArea());
Console.WriteLine("Total paint cost: ${0}" , Rect.getCost(area));
Console.ReadKey();
}
}
}
Cuando se compila y ejecuta el código anterior, produce el siguiente resultado:
Total area: 35
Total paint cost: $2450