好的,所以我有课程
class B<T> : A<T>
class L : K
和方法
void Method(A<K> a) {...}
我想做的是这个
var b = new B<L>();
Method(b); //error
但是不可能使用正确的类型。确实不可能做这个演员
A<K> t = new A<L>(); //error
我真的想不必须更改Method的内部。我对B和/或L进行更改没有任何问题。我有什么选择可以做出某种解决方法吗?我想Method应该可以在b上执行它的所有方法调用等,因为B派生自A,L派生自K?
答案 0 :(得分:1)
假设你正在使用C#4.0+,你需要声明A的类型参数是协变的:
public class A<out T> where T : K
{
}
这应该允许您将B的变量传递给A
的参数更多信息:
Understanding Covariant and Contravariant interfaces in C#
显然,在OOP中,您可以将派生类型传递给声明为基本类型的参数(这就是整点)。协方差允许相同的东西 - 但对于类型参数,这是你在这种情况下所需要的。