使用派生类派生类的实例调用方法

时间:2013-10-27 21:51:34

标签: c# generics polymorphism

好的,所以我有课程

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?

1 个答案:

答案 0 :(得分:1)

假设你正在使用C#4.0+,你需要声明A的类型参数是协变的:

public class A<out T> where T : K
{
}

这应该允许您将B的变量传递给A

的参数

更多信息:

Understanding Covariant and Contravariant interfaces in C#

显然,在OOP中,您可以将派生类型传递给声明为基本类型的参数(这就是整点)。协方差允许相同的东西 - 但对于类型参数,这是你在这种情况下所需要的。