考虑以下代码行:

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/

10-10 16:31