0
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
從HostFactory.Create<GenericHost>(new Config())
類型?在我看來,TConfig
只有一種可能的類型?
我不會從編譯器得到一個推論錯誤,但:
類型「
GenericHost
」必須轉換爲HostBase<TConfig>
,以便在通用方法「THost HostFactory.Create<THost, TConfig>(TConfig)
使用它作爲參數「THost
」 '
這個錯誤似乎很奇怪,因爲這確實編譯了:HostBase<Config> h = new GenericHost()
。
我錯過了什麼?
啊,不記得那個限制。是的,我想將'THost'參數移動到類中,但是因爲我需要在'TConfig'上限制它不起作用...原因是有其他非泛型實現'HostBase',我的目標是無論類型如何都對所有實例有相同的語法。但我想這是不可能的,如果不改變一些基礎,然後 – carlpett
@carlpett:一個類似的問題更詳細地回答(也由斯基特先生):http://stackoverflow.com/questions/15619038/is-there-一個語法此結果一顛倒型推理 –