我有四节课。
Son
,Father
,GrandFather
和GrandGrandFather
。
如果在Son
课程中我写base
个关键字,它将会到达GrandGrandFather
课程。但是如何从GrandFather
课程到达Son
?继承中使用了哪些关键字?
答案 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
可以访问GrandFather
而GrandFather
可以访问GrandGrandFather
。
任何生成跳过功能都必须明确地内置到您的类中。例如,如果GrandGrandFather
要使其某些功能可用于其子类的子类,则需要为其提供受保护和/或内部方法。