在C#中分配给通用委托时遇到问题

时间:2011-07-11 19:48:57

标签: c#

我的问题如下:

public abstract class A {}

public class B : A {
    public static IList<B> MyMethod(){ return new List<B>();}
}

public delegate IList<T> MyDelegate<T>() where T : A;



...

public static void CalledMethod<T>() where T : A{
    MyDelegate<T> del = B.MyMethod;  // This doesn't work
}

任何人都可以解释一下让它发挥作用的最佳方法吗?

感谢您的帮助。

已修改以修复示例。

3 个答案:

答案 0 :(得分:1)

您需要告诉编译器MyMethod是什么:

MyDelegate<T> del = B.MyMethod;

答案 1 :(得分:1)

这就是为什么这不起作用

public class C: A {}

CalledMethod<C>();

这意味着del类型MyDelegate<C>不适用于B.MyMethod,因为C不是B

答案 2 :(得分:1)

这不能按照您编码的方式完成,因为您正在尝试使MyDelegate同变,但返回的IList<T>接口不支持方差,因为它不能。

IList<B>IList<A>不能以任何方式支持差异。可以这样想,List<SalariedEmployee>不能像List<Employee>那样完全对待,因为这会让你Add(new HourlyEmployee)错误。