Делегат не принимает подкласс?

Мой делегат, похоже, не принимает подкласс, я думаю, что это самый простой пример.

public class A
{
     public A() { }
}

public class B : A
{
     public B() { }
}

public class Program
{
     private delegate void CallBack(A a);
     private static CallBack callBack = new CallBack(Test);

     public Main(string[] args)
     {
          callBack(new B());
     }

     private static void Test(A a)
     {
          Console.WriteLine("Test()");    
     }

     // Compilation error occurs if Test becomes:
     private static void Test(B a)
     {
          Console.WriteLine("Test()");
     }
 }

Когда я меняю Test на accept B , возникает ошибка компиляции. Разве это не странно, потому что B расширяет A ?

Ошибка компилятора :

Нет перегрузки для обратного вызова тестовых совпадений

Есть ли способ сделать мой делегат принимает класс, который расширяет A ?

5
задан Kevin 17 September 2010 в 08:56
поделиться