Мой делегат, похоже, не принимает подкласс, я думаю, что это самый простой пример.
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
?