El polimorfismo es una característica o funcionalidad más de la herencia. De hecho, la herencia implica el polimorfismo de las clases. Esto significa que toda clase derivada puede, implícitamente, convertirse en un objeto de su clase base. Tomemos como ejemplo estas dos clases:
Es posible declarar e instanciar un objeto del tipo 'InheritancedClass' y después asignarlo a un objeto de clase 'BaseClass':
Los miembros específicos de la clase derivada ya no están disponibles en el objeto de la clase base:
La conversión inversa, del tipo base al tipo derivado, se debe hacer de manera explícita:
Aun así, si la conversión explícita fallara, dicha conversión se puede hacer mediante el operador 'as':
A continuación no está de más realizar una comprobación de si la conversión se ha realizado con éxito:
Sin esta prueba la conversión sin el operador 'as' es más ventajosa, ya que el error que dará el compilador será más descriptivo.
El operador 'is' permite probar el tipo de un objeto y, en consecuencia, predecir el resultado de una conversión:
Incluso si el objeto se convierte a su tipo base, la prueba con el operador 'is' refleja que el objeto está en el orgien del tipo derivado. Esto no es cierto en el caso de que el objeto se declare como un tipo base:
Por lo tanto, una referencia a una clase derivada puede ser convertica inmplícitamente por C# en una referencia a su clase base (directa o indirecta). Esto significa que es posible referirse a un objeto de una clase derivada utilizando una variable del tipo de su clase base.