假设你有这个:
// 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 类型,那么智能感知只会向我显示基本的常用方法,我想在其中显示更具体的接口。
我还能怎么做到这一点?这段代码有什么问题???