Creo que no ves el beneficio, esa es la clave que te falta para comprender completamente el polimorfismo. Trataré de dar un ejemplo:
Digamos que tiene un formulario CRUD simple. Este es el código del botón de guardar:
var Client = PopulateDTO(); //put all the values in the controls, to an object
if(Action==Actions.Create){
_repository.Create(Client);
}
else if(Action==Actions.Update){
_repository.Update(Client);
}
else if(Action==Actions.Delete){
_repository.Delete(Client);
}
this.Close();
Este código funciona, pero es mal código, y difícil de leer.Vamos a usar el polimorfismo (y el patrón de estrategia):
public abstract class BaseStrategy{
abstract void Do(ClientDto Client);
}
public class CreateStrategy:BaseStrategy{
public override void Do(ClientDto Client){
_repo.Save(Client);
}
}
public class UpdateStrategy:BaseStrategy{
public override void Do(ClientDto Client){
_repo.Update(Client);
}
}
public class DeleteStrategy:BaseStrategy{
public override void Do(ClientDto Client){
_repo.Delete(Client);
}
}
Por lo tanto, tenemos una clase abstracta, y 3 implementaciones, cada uno haciendo algo con el objeto de cliente. Ahora, el código del botón de guardar en forma será:
BaseStrategy stg = GetCorrectStrategy();
var Client = PopulateDTO();
stg.Do(Client);
this.close;
Y el método GetCorrectStrategy() será una instancia de la implementación de la estrategia correcta, dependiendo de si el usuario está creando, editar o borrar el cliente.
Espero que esta respuesta te ayude. Pero si no te ayudó, sugiero que leas sobre el patrón de estrategia, es uno de los mejores usos del polimorfismo en mi opinión
Mejor stil sería poner la definición del método CleanTheRoom en una interfaz 'IClean' e implementar eso para los tipos de humanos que pueden limpiar. Entonces obtienes polimorfismo libre al poder enviar estos humanos a esta interfaz. – ChristopheD
Definitivamente es un ejemplo de sexismo. – juharr
@juharr y agism. – kenny