C#协方差:具有不同接口签名的类

时间:2017-12-02 19:02:54

标签: c# generics inheritance implicit-conversion

我有一个带有以下签名的基类:

abstract class BaseClass<I, S>

然后我定义一个具有以下签名的类来扩展BaseClass

class ExtendedClass<I> : BaseClass<I, int>

因此,ExtendedClass设置S的{​​{1}}泛型类型与BaseClass参数。我正在使用以下类:

int

这会引发以下错误:

  

无法将类型ExtendedClass隐式转换为BaseClass

一些简化的背景:

BaseClass<I, S> anInstance = new ExtendedClass<I>();

2 个答案:

答案 0 :(得分:4)

您应该为参考指定SI。如果您不在班级范围内:

BaseClass<SomeClass, int> anInstance = new ExtendedClass<SomeClass>();

如果你在班级范围内

BaseClass<I, int> anInstance = new ExtendedClass<I>();

SBaseClass上下文中为泛型类型指定的名称。它不存在于它之外,当你定义引用时,你必须给出具体的类型。

答案 1 :(得分:3)

第二个类型参数必须设置为int

BaseClass<I, int> anInstance = new ExtendedClass<I>();

显然,I也必须是泛型类中的具体类型或其他类型参数。