Полиморфные методы не работают в 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();
    }
}

Я ожидал, что будет вызван второй метод, потому что тип среды выполнения переменной - B. Есть идеи, почему код вместо этого вызывает первый метод?

Спасибо, Тиби

Некоторые пояснения: Полиморфизм означает несколько форм, которые не имеют ничего общего с тем, где вы объявляете метод.

Перегрузка метода - это форма полиморфизма, специального полиморфизма.

Способ, которым полиморфизм обычно реализуется, заключается в использовании позднего связывания.

dynamic - это обходной путь для этой проблемы.

Дело в том, что это не работает в C # (или Java), это дизайнерское решение, которое я хотел бы понять, почему было сделано, и ни один из ответов не отвечает на этот вопрос.

/ Тиби

7
задан Tibi 17 November 2011 в 14:10
поделиться