具有抽象类实现的泛型函数

时间:2020-04-09 05:09:09

标签: c# generics

我正在尝试编写一个通用函数,如下图所示。 想法是要有一个方法,该方法将接收一个泛型类型,该方法必须继承一个抽象类,该抽象类具有一个具有另一个抽象类的通用配置。

public class MainCode
{
    public MainCode()
    {
        Execute<DefaultOptions>();
    }

    public void Execute<T>() where T : BaseClassOptions<BaseClassConfiguration> { }
}

public class DefaultOptions : BaseClassOptions<DefaultConfiguration> { }

public abstract class BaseClassOptions<T> where T : BaseClassConfiguration
{
    public T Config { get; set; }
}

public class DefaultConfiguration : BaseClassConfiguration { }

public abstract class BaseClassConfiguration
{
    public string Host { get; set; }
}

但是我遇到了以下错误:

Error

能帮我吗?

1 个答案:

答案 0 :(得分:0)

也许这对您有用?

    public MainCode()
    {
        Execute<DefaultOptions, DefaultConfiguration>();
    }

    public void Execute<T, T2>() where T : BaseClassOptions<T2> where T2: BaseClassConfiguration
    { }

问题在于BaseClassOptions<BaseClassConfiguration>不是DefaultOptions的基类,这就是为什么会出现此错误的原因。发生这种情况是因为泛型类上的类型参数都不是covariant nor contravariant,即同一泛型类的专业化之间没有继承关系。如果您不想使用接口,则可能需要直接告诉编译器将哪个类用作基本类型的通用参数。

相关问题