如何在继承中获取特定的基类?

时间:2017-05-04 13:44:39

标签: c# class inheritance

我有四节课。

SonFatherGrandFatherGrandGrandFather

如果在Son课程中我写base个关键字,它将会到达GrandGrandFather课程。但是如何从GrandFather课程到达Son?继承中使用了哪些关键字?

2 个答案:

答案 0 :(得分:4)

我认为你看错了。层次结构中的每个实例基本上都是相同的类型(例如Human)。您正在查看组合示例,而不是继承,其中每个Human都包含对其他Humans的引用。像这样:

public class Node
{
    public string Name { get; set; }
    /* Other properties */

    public Node Parent { get; set; }
    public Node Child { get; set; }
} 

人口的例子:

Node son = new Node();
Node father = new Node { Child = son };
Node grandFather = new Node { Child = father };

son.Parent = father;
father.Parent = grandFather;

一般来说,访问层次结构的某个深度

node.Child.Child.Child .....
node.Parent.Parent.parent ....

要跳过几代人,您可以编写如下函数:

public Node GetAncestor(int generations)
{
    if (generations == 0)
        return this;
    return Parent?.GetAncestor(generations - 1);
}

//Will retrieve grandFather
var ancesstor = son.GetAncestor(2);

答案 1 :(得分:3)

C#语言不提供"生成跳过"用于处理继承层次结构的构造。如果层次结构如下

GrandGrandFather
    |
    +--- GrandFather
            |
            +--- Father
                    |
                    +--- Son

然后Son可以使用Father访问base,而Father可以访问GrandFatherGrandFather可以访问GrandGrandFather

任何生成跳过功能都必须明确地内置到您的类中。例如,如果GrandGrandFather要使其某些功能可用于其子类的子类,则需要为其提供受保护和/或内部方法。