Acabo de tropezar con un problema muy interesante. Dando el siguiente código:Los métodos polimórficos no funcionan en C# 4
using System;
class Program
{
class A { }
class B : A { }
private static void MyMethod(A a) /* first method */
{
Console.WriteLine("A"); ;
}
private static void MyMethod(B b) /* second method */
{
Console.WriteLine("B");
}
static void Main(string[] args)
{
var a = new A();
// Call first method
MyMethod(a);
A b = new B();
// Should call the second method
MyMethod(b);
Console.ReadLine();
}
}
yo esperaría que el segundo método se llama porque el tipo de tiempo de ejecución de la variable es B. Cualquier idea por qué el código llama el primer método en su lugar?
Gracias, Tibi
Algunas aclaraciones: El polimorfismo significa varias formas que no tiene nada que ver donde se declara el método.
Sobrecarga del método es una forma de polimorfismo, polimorfismo ad-hoc.
La forma en que el polimorfismo normalmente se implementa mediante el uso de encuadernación tardía.
dynamic es la solución para este problema.
El hecho es que esto no está funcionando en C# (o Java) es una decisión de diseño que me gustaría entender por qué se hizo, y ninguna de las respuestas está respondiendo a esta pregunta.
/Tibi
Esto no es polimorfismo, tiene dos instancias sobrecargadas del mismo método, cada una teniendo diferentes tipos como parámetros. Luego declaras "b" como A. El compilador te permite hacer esto porque B hereda A. – Maess