考虑以下代码行:
public interface IProduct
{
string Name { get; set; }
}
public interface IProductList
{
string Name { get; }
IProduct GetValueObject();
}
public abstract class BaseProductList<T> : IProductList where T : class, IProduct, new()
{
public abstract T GetValueObject();
public string Name { get; set; }
}
这给了我以下警告:
(错误 1 'ConsoleApplication1.EnumTest.BaseProductList' 不
实现接口(interface)成员
'ConsoleApplication1.EnumTest.IProductList.GetValueObject()'。
'ConsoleApplication1.EnumTest.BaseProductList.GetValueObject()'
无法执行
'ConsoleApplication1.EnumTest.IProductList.GetValueObject()' 因为
它没有匹配的返回类型
'ConsoleApplication1.EnumTest.IProduct'。\cencibel\homes$\k.bakker\visual
工作室
2010\Projects\ConsoleApplication1\ConsoleApplication1\EnumTest\Program.cs 29 23 TestApp)
但是当我添加这段明确的代码时,它起作用了:
IProduct IProductList.GetValueObject()
{
return GetValueObject();
}
为什么.Net 无法解决这个问题!?
最佳答案
返回 IProduct
的方法与返回 some-type-implementing- IProduct
的方法不同。您正在尝试使用 covariant return types - .NET 不支持。
基本上它类似于这种情况:
// Doesn't compile
class Foo : ICloneable
{
public Foo Clone()
{
return new Foo();
}
}
看起来不错,并且允许客户端调用
Clone()
并返回强类型值 - 但它没有实现接口(interface)。这在 .NET 中不受支持,而且从来没有 - 您的代码中的泛型只是同一问题的另一个示例。关于c# - 给我猜谜语 : why does the implicit interface implementation error occur?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7914735/