鉴于这些类:
public abstract class HostBase
{}
public abstract class ConfigBase
{}
public abstract class HostBase<TConfig> : HostBase where TConfig : ConfigBase
{
protected internal TConfig Config { get; set; }
}
public class GenericHost : HostBase<Config>
{}
public class HostFactory
{
public static THost Create<THost, TConfig>(TConfig config)
where THost : HostBase<TConfig>, new()
where TConfig : ConfigBase
{
return new THost { Config = config };
}
}
为什么编译器不能推断TConfig
from的类型HostFactory.Create<GenericHost>(new Config())
?在我看来,只有一种可能的类型TConfig
?
但是,我没有从编译器中得到推理错误:
类型“
GenericHost
”必须可转换为才能在泛型方法“ ”中HostBase<TConfig>
用作参数“ ”THost
THost HostFactory.Create<THost, TConfig>(TConfig)
这个错误看起来很奇怪,因为它确实编译:HostBase<Config> h = new GenericHost()
。
我错过了什么?