我有几个方法,其参数是派生类型:
bool Method1(ChildType1);
bool Method2(ChildType2);
使用ChildType1
和ChildType2
来自ParentType。
我想要一个可以接受Method1或Method2但是得到编译错误的委托:
Func<ParentType, bool> MyDelegate = Method1;
错误1&#39;方法1&#39;匹配委托&#39; Func&lt; ParentType的, 布尔&GT;&#39;
有没有办法避免这种情况?
答案 0 :(得分:4)
没有
想想如果可能会发生什么:
Func<ParentType, bool> MyDelegate = Method1;
//Method1 does not accept a parameter of type ChildType2, but MyDelegate does
MyDelegate(new ChildType2());
这不起作用的原因与您无法将List<Dog>
的实例投射到List<Animal>
的原因相同 - 因为那样您就可以调用{{ 1}},它必须在运行时抛出异常,因为猫不能被添加到狗的列表中。