我的代表似乎不接受子类,我认为一个例子是最简单的。
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更改为接受
B
时,它将引发编译错误。这是不是很奇怪,因为B
扩展了A
吗?编译器错误:
有没有一种方法可以使我的委托(delegate)接受扩展
A
的类? 最佳答案
这并不奇怪,因为如果您有一个扩展了C
的A
类的对象,则仅接受Test()
的对象传递给B
是没有意义的。用于Callback
的任何方法都必须接受任何A
,而不仅仅是特定的子类。如果您希望Callback
也接受B
,则需要更改Test()
委托(delegate)签名以接受B
。
class C : A {};
Callback callback = Test;
callback(new C()); //what if Test() accepted B???
关于c# - 委托(delegate)不接受子类?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3733551/