3

我有这样的代码:

public interface INode
{
    INode Parent { get; set; }
    // ......
}

public interface ISpecificNode : INode
{
    new ISpecificNode Parent { get; set; }
    // ......
}

public class SpecificNode : ISpecificNode
{
    ISpecificNode Parent { get; set; }
    // ......
}

此代码给出编译错误,因为未实现 INode.Parent。但是,我不需要重复的 Parent 属性。
我该如何解决这个问题?

4

2 回答 2

10

我想你正在寻找这样的东西:

public interface INode<T> where T : INode<T>
{
    T Parent { get; set; }
}

public interface ISpecificNode : INode<ISpecificNode>
{
}

public class SpecificNode : ISpecificNode
{
    public ISpecificNode Parent { get; set; }
}
于 2013-10-06T09:40:00.713 回答
2

这不是像类那样继承/覆盖 - 接口不继承其他接口,它们实现它们。

这意味着任何实现的东西也ISpecificNode必须实现INode

我建议您删除该行

new ISpecificNode Parent { get; set; }

可能没有必要。或者,您可以INode在抽象基类上实现,用具体类覆盖它SpecificNode,并使用属性隐藏来隐藏属性的INode版本。

于 2013-10-06T09:36:11.020 回答