在c#中分配给泛型委托时遇到麻烦
本文关键字:遇到 麻烦 泛型 分配 | 更新日期: 2023-09-27 18:01:42
我的问题如下:
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
}
谁能解释一下让这个工作的最好方法?
谢谢你的帮助。
编辑修复示例
为什么这行不通
public class C: A {}
CalledMethod<C>();
这意味着del
将是MyDelegate<C>
类型,这与B.MyMethod
不工作,因为C
不是B
。
你需要告诉编译器MyMethod
是什么:
MyDelegate<T> del = B.MyMethod;
这不能按你编码的方式完成,因为你正试图使MyDelegate协变,但是返回的IList<T>
接口不支持方差,因为它不能。
IList<B>
和IList<A>
都不支持方差。这样想,List<SalariedEmployee>
不能完全像List<Employee>
一样处理,因为这会使您的Add(new HourlyEmployee)
不正确。