2

好的,所以我有课

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 进行更改没有问题。我是否有任何解决方法的选项?我猜 Method 应该可以在 b 上执行它的所有方法调用等,因为 B 派生自 A 而 L 派生自 K?

4

1 回答 1

1

假设您使用的是 C# 4.0+,您需要将 A 的类型参数声明为协变的:

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

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

更多信息:

了解 C# 中的协变和逆变接口

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

于 2013-10-27T22:37:52.860 回答