Я просто наткнулся на очень интересную проблему. Дать следующий код:
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();
}
}
Я ожидаю, что будет вызван второй метод, потому что тип переменной во время выполнения - B. Есть идеи, почему код вызывает первый метод вместо этого?
Спасибо,
Тиби
Некоторые пояснения: полиморфизм означает несколько форм, которые не имеют ничего общего с тем, когда вы объявляете метод.
Метод перегрузки является формой полиморфизма, специального полиморфизма.
Способ полиморфизма обычно реализуется с использованием позднего связывания.
динамическое решение для этой проблемы.
Дело в том, что это не работает в C # (или Java), это проектное решение, которое я хотел бы понять, почему было принято, и ни один из ответов не отвечает на этот вопрос.
/ Тиби