我的问题如下:
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
}
任何人都可以解释一下让它发挥作用的最佳方法吗?
感谢您的帮助。
已修改以修复示例。
答案 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)
错误。