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

C# covariance: classes with different interface signature

我有一个具有以下签名的基础 class:

abstract class BaseClass<I, S>

然后我用下面的签名定义一个 class 来扩展 BaseClass:

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

因此,ExtendedClass 使用 int 参数设置 BaseClassS 通用类型。我正在使用 classes,如下所示:

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

这会引发以下错误:

Cannot implicitly convert type ExtendedClass to BaseClass

一些简化的上下文:

abstract class Analyzer<I, S>
{
    protected BaseClass<I, S> Run()
    {
        // implements some logic here, based their results different
        // extensions of BaseClass can be returned. This logic is 
        // simplified as the following.
        switch(some_logic_output)
        {
            case true: return new ExtendedClass<I>(){ /*some property settings*/ };
            case false: return null;
        }
    }
}

第二类参数必须设置为int:

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

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

你应该指定参考SI是什么。如果你在class范围之外:

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

如果您在class

的范围内
BaseClass<I, int> anInstance = new ExtendedClass<I>();

S 是在 BaseClass 上下文中为泛型类型指定的名称。它不存在于它之外,并且在像您一样定义引用时必须提供具体类型。