Herencia en los
constructores:
Herencia: Es la propiedad de la programacion
orientada a objetos (POO) que en parte permite la
modificacion del comportamiento de un objeto.
Ese es el concepto que has entendido bien hasta
ahora.
Supongamos que tengamos la siguiente clase:
public class Cosa
{
public Cosa(string
nombre)
{
Nombre =
nombre;
}
public string
Nombre { get; private set; }
}
Definimos el constructor de la clase Cosa y
tenemos una propiedad comun llamada Nombre, pero, la clase no es capaz de
hacer nada por si sola, es entonces que se procede a heredar de las clases como
esta, heredemosla:
public class Televisor : Cosa
{
public int
Canal { get; set; }
public Televisor()
: base("Televisor")
{
Canal = 1;
// Ajustamos el TV para estar en el canal 1.
}
}
En este ejemplo he hecho lo mismo que en el caso
que preguntas, si te fijas, en el constructor de Televisor() he
puesto a su lado : base("Televisor"), esto es para que se llame
al constructor de Cosa(string) antes de realizar las acciones del
constructor de la clase Television, como mencione arriba, es como aplicar
la herencia a una funcion; al utilizar la palabra clave base, se puede
especificar cualquier metodo que produzca el comportamiento de la clase
principal, por lo que con un base.NombreDelMetodo() basta para
realizarlo en cualquier otro metodo.
Si hacemos dentro del constructor de Television lo
siguiente:
public Television() : base("Television")
{
// resto del
codigo
System.Console.WriteLine(Nombre);
}
Imprimira "Television", debido a
que ya ajustamos el constructor de la clase madre, base o "superclase"
(Como quieras llamarlo) para que realice las acciones necesarias.
Dentro de este campo, C# incluye clases
abstractas y funciones virtuales, con el objetivo de que puedas hacer tu objeto
aun mas abstracto, pero todo depende de lo que se necesites.
DEMOSTRACIÓN
Crearemos una aplicación de consola y ejecutaremos el siguiente código:using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Herencia3
{
public
class A
{
public A()
{
Console.WriteLine("Constructor de la clase A");
}
}
public
class B : A
{
public B()
{
Console.WriteLine("Constructor de la clase B");
}
}
public
class C : B
{
public C()
{
Console.WriteLine("Constructor de la clase C");
}
}
class
Prueba
{
static void Main(string[] args)
{
C obj1 = new C();
Console.ReadKey();
}
}
}
El resultado: