我创建了一个类层次结构,如Object-> MyClass-> MyDerivedClass:
class MyClass : object
{
public string MyMethod()
{
return "My method called";
}
}
class MyDerivedClass : MyClass
{
public string MyDerivedMethod()
{
return "My Derived method called";
}
}
现在在代码中我声明了一个Func并尝试为其分配一个委托
Func<MyClass, string> myFunc = delegate(object a) { return ""; };
在.NET Func
中声明为
public delegate TResult Func<in T, out TResult>(T arg);
因此,第一个in T
参数是逆变的。并根据MSDN
Contravariance使您可以使用较少派生的类型 由通用参数
指定
因此,我可以将object
指定为参数,而不是MyClass
。如果是这样,为什么我会收到“不兼容的签名错误”错误?
即使我将作业更改为
Func<MyClass, string> myFunc = delegate(MyDerivedClass a) { return ""; };
我仍然得到相同的"incompatible signature error" error
。