实现一个抽象方法,它本身就是一个通用接口方法的实现

时间:2010-11-09 15:43:39

标签: c# interface abstract-class deep-copy

我在这个过于复杂的类层次结构中遇到编译错误。我想知道是否与尝试混合使用泛型的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>'

2 个答案:

答案 0 :(得分:3)

返回bool

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

修改
然后你不能使用接口的显式实现,因为这不符合你需要实现它的抽象类的契约。

public override IInterface<SomeOtherClass> DeepCopy()
{
    return new ConcreteClass();
}

答案 1 :(得分:2)

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

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

public override IInterface<SomeOtherClass> DeepCopy()
{
}

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