比方說,我有這樣的接口和具體實施接口與泛型參數VS接口與通用方法
public interface IMyInterface<T>
{
T My();
}
public class MyConcrete : IMyInterface<string>
{
public string My()
{
return string.Empty;
}
}
所以我對strings
創建MyConcrete實現,我可以有一個int
更具體的實施。沒關係。但是,讓我們說,我想做同樣的事情,但與一般的方法,所以我有
public interface IMyInterface2
{
T My<T>();
}
public class MyConcrete2 : IMyInterface2
{
public string My<string>()
{
throw new NotImplementedException();
}
}
所以我也有同樣IMyInterface2
,但它定義了的T My<T>()
手段仿製行爲。在我的具體類中,我想實現My
行爲,但是對於具體的數據類型 - string
。但是C#不允許我這樣做。
我的問題是爲什麼我不能這樣做? 換句話說,如果我可以創建MyInterface<T>
的具體實現MyClass : MyInterface<string>
並停止在這一點的通用性,爲什麼我不能用通用方法做到這一點 - T My<T>()
?
當繼承類型時,你不能*減少*能力,你只能添加它們。 –