繁体   English   中英

C#中的接口多态性

[英]Interface polymorphism in C#

我有这样的代码:

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。 但是,我不需要重复的父属性。
我该如何解决这个问题?

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

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; }
}

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

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

我建议你删除该行

new ISpecificNode Parent { get; set; }

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM