假设您有以下内容:
为什么会出现编译错误?我尊重接口 - 实际上,我确实间接地返回了IDataResult。是编译器无法理解还是在面向对象层面上有根本性的问题?
我认为拥有接口的全部意义在于我可以保证某些实现,但也让我有机会对其进行扩展。这就是我正在做的事情 - 然而我却得到了一个编译错误。
在我的真实代码中,我想让返回类型更加具体,因为我在派生接口中有几个额外的方法。如果我将 MyCrazySerializer.Serialize 的返回类型设为 IDataResult 类型,那么智能感知只会显示基本共同的方法,而我想显示一个更具体的接口。
我应该如何完成这个任务?这段代码有什么问题吗?
// 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。是编译器无法理解还是在面向对象层面上有根本性的问题?
我认为拥有接口的全部意义在于我可以保证某些实现,但也让我有机会对其进行扩展。这就是我正在做的事情 - 然而我却得到了一个编译错误。
在我的真实代码中,我想让返回类型更加具体,因为我在派生接口中有几个额外的方法。如果我将 MyCrazySerializer.Serialize 的返回类型设为 IDataResult 类型,那么智能感知只会显示基本共同的方法,而我想显示一个更具体的接口。
我应该如何完成这个任务?这段代码有什么问题吗?