好,我上课了
class B<T> : A<T>
class L : K
和方法
void Method(A<K> a) {...}
我想做的是这个
var b = new B<L>();
Method(b); //error
但是b不可能是正确的类型。确实不可能进行此演员表
A<K> t = new A<L>(); //error
我真的很想不必更改Method的内部。我对B和/或L进行更改没有问题。是否可以选择某种解决方法?我猜方法应该有可能在b上执行其所有方法调用等,因为B派生自A,L派生自K?
假设您使用的是C#4.0以上版本,则需要将A的类型参数声明为协变的:
public class A<out T> where T : K
{
}
这应该允许您将变量B传递给参数A
更多信息:
显然,在OOP中,您可以将派生类型传递给声明为基本类型的参数(这就是重点)。协方差允许同样的事情-但是对于类型参数,这是您在这种情况下需要的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句