我正在尝试编写一个通用函数,如下图所示。 想法是要有一个方法,该方法将接收一个泛型类型,该方法必须继承一个抽象类,该抽象类具有一个具有另一个抽象类的通用配置。
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; }
}
但是我遇到了以下错误:
能帮我吗?
答案 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,即同一泛型类的专业化之间没有继承关系。如果您不想使用接口,则可能需要直接告诉编译器将哪个类用作基本类型的通用参数。