1

我得到这个过于复杂的类层次结构的编译错误。我想知道这是否与尝试使用混入泛型的 DeepCopy() 有关。

public interface IInterface<T>
{
    IInterface<T> DeepCopy();
}

public abstract class AbstractClass<T> : IInterface<T>
{
    public abstract IInterface<T> DeepCopy(); // Compiler requires me to declare this public
}

// Everything good at this point.  There be monsters below

public class ConcreteClass: AbstractClass<SomeOtherClass>
{
    ConcreteClass IInterface<SomeOtherClass>.DeepCopy()
    {
        return new ConcreteClass;
    }
}

我收到以下编译器错误:

'IInterface<...>.DeepCopy()': containing type does not implement interface 'IInterface<SomeOtherClass>'
4

2 回答 2

3

返回布尔值

更改 为ConcreteClass IInterface<SomeOtherClass>.MyMethod()
bool IInterface<SomeOtherClass>.MyMethod()

编辑:
然后你不能使用接口的显式实现,因为这不符合你需要像这样实现它的抽象类的合同。

public override IInterface<SomeOtherClass> DeepCopy()
{
    return new ConcreteClass();
}
于 2010-11-09T15:45:55.887 回答
2

错误是因为返回类型DeepCopy()与接口中的声明不匹配。

除此之外,您还有一个不同的问题。抽象类已经实现了接口中的方法,但在具体类中您没有实现抽象方法。您应该拥有以下实现,而不是您现在拥有的实现:

public override IInterface<SomeOtherClass> DeepCopy()
{
}

这将在抽象类中实现抽象方法,该抽象类会自动实现接口中的方法。您需要在抽象类中实现抽象方法的原因是因为该类需要实现接口。这是一个班级的要求。

于 2010-11-09T15:46:09.407 回答