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()); }