示例

时间:2015-08-10 14:39:07

标签: c# delegates contravariance

我创建了一个类层次结构,如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

0 个答案:

没有答案