class Persona
{
private string _nombre;
public Persona(string nombre)
{
Console.WriteLine("Constructor persona " + nombre);
this.Nombre = nombre;
}
public string Nombre
{
set { this._nombre = value; }
get { return this._nombre; }
}
public virtual string saludo()
{
return "Hola "+Nombre+" que tal";
}
}
class Empleado :Persona
{
public Empleado(string nombre) : base(nombre)
{
Console.WriteLine("Constructor empleado " + nombre);
this.Cargo = "Empleado";
}
private string _cargo;
public string Cargo {
set { this._cargo = value; }
get { return this._cargo; } }
public override string saludo()
{
return "Hola empleado " + Nombre + " ¿Todo bien?";
}
}
class Gerente : Empleado
{
public int Bono { get; set; }
public Gerente(string nombre) : base(nombre)
{
Console.WriteLine("Constructor gerente " + nombre);
this.Cargo = "Gerente";
}
public Gerente(string nombre, int bono) : this(nombre)
{
this.Bono = bono;
}
public override string saludo()
{
return "Hola Sr. " + Nombre + " ¿Desea alguna cosa?";
}
}
sealed class Direccion : Gerente
{
public Direccion(string nombre) : base(nombre, 100) {
Console.WriteLine("Constructor direccion " + nombre);
}
public override string saludo()
{
return "Buenos días Sr. " + Nombre + " Estamos a sus órdenes";
}
}
Ejemplo de uso:
Persona[] plantilla = { new Persona("Eva"), new Empleado("Juan"),new Empleado("Ana"),
new Gerente("Rosa"), new Gerente("Luis"), new Direccion("Laura")};
foreach(Persona empleado in plantilla)
{
Console.WriteLine(empleado.saludo());
}