3
我有這2個接口:結果類型協方差 - 與方法返回輸入接口類型和特定類型的泛型類
public interface IResult
{
object SomeProperty {get;set;}
}
public interface IFooManager
{
IResult GetResult(string someId);
}
我想實現一個泛型類的IFooManager
是這樣的:
public class MyFooManager<T> : IFooManager where T: class, IResult
{
public T GetResult(string id)
{
return null; //the value doesn't really matter here
}
}
然而,這會導致編譯錯誤:
Cannot implement method from interface [..].IFooManager. Return type should be [..].IResult
現在,我知道我可以通過另外定義接口的方法明確,這樣解決這個問題:
IResult IFooManager.GetResult(string id)
{
return GetResult(id);
}
但問題是:爲什麼不能編譯器只是弄清楚,那的確T GetResult()
返回一個對象實施IResult
?我知道我可能會在上面介紹一個out T
協方差接口,但是我無法將其從頭上劃掉 - 爲什麼T
類型限制不足以確保類型安全?
編譯器無法完成函數重寫的返回類型協變,理由是沒有理由,除了語言不支持這個(並且它可能不支持它,因爲運行時不支持它) 。你可以看到這個代碼在其他語言中工作。 – milleniumbug
他可以簡單地使他的接口是通用的,並有方法返回T. – Mishka
[爲什麼不C#推斷我的泛型?](https://stackoverflow.com/questions/8511066/why-doesnt-c-sharp -infer-my-generic-types) –