【发布时间】:2012-07-21 19:21:15
【问题描述】:
假设你有这个:
// 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 类型,那么智能感知只会向我显示基本的常用方法,我想在其中显示更具体的接口。
我还能如何做到这一点?这段代码有什么问题???
【问题讨论】:
-
@euphoric - 我同意,其他帖子有很多好信息。