假設你有這樣的:接口實現的混亂
// General purpose
public interface ISerializer
{
IDataResult Serialize<T>(T instance);
}
// General purpose
public interface IDataResult
{
}
// Specific - and I implement IDataResult
public interface IMyCrazyDataResult : IDataResult
{
}
public class MyCrazySerializer : ISerializer
{
// COMPILE ERROR:
// error CS0738: 'MyCrazySerializer' does not implement interface member 'ISerializer.Serialize<T>(T)'.
// 'MyCrazySerializer.Serialize<T>(T)' cannot implement 'ISerializer.Serialize<T>(T)' because it does
// not have the matching return type of 'IDataResult'.
public IMyCrazyDataResult Serialize<T>(T instance)
{
throw new NotImplementedException();
}
}
爲什麼在世界上我能得到這個編譯錯誤?我尊重界面 - 事實上,我確實會間接返回一個IDataResult。是編譯器無法弄清楚這個問題,還是在某種程度上(在OO級別)有錯誤的地方?
我覺得有一個接口的整個觀點是,我可以保證一些實現,但讓我打開它來加載它。這就是我正在做的 - 但我得到一個編譯錯誤。
在我的真實代碼中,我希望返回類型更具體,因爲我在派生接口中有幾個額外的方法。如果我使用返回類型的MyCrazySerializer.Serialize類型的IDataResult,那麼intellisense只是顯示我和那些簡單的常用方法,我想在其中顯示更具體的接口。
我還能怎麼做到這一點?這段代碼有什麼問題?
[C#是否支持返回類型協變?](http:// stackoverflow。com/questions/5709034/does-c-sharp-support-return-type-covariance) – Euphoric 2012-07-21 19:24:27
@euphoric - 我同意,在其他帖子上有很多很好的信息。 – 2012-07-21 19:43:19