下面的多级继承在 .Net5 中是如何工作的?
How is the below multilevel inheritance working in .Net5?
- 在Image section 1中,中间class ClassA继承了 ClassASuper 但不会覆盖 Display 方法,而是在子子 中被覆盖ClassB 并且它似乎按预期工作。
- 在图像部分2中,中间classClassA继承了 ClassASuper 并覆盖 Display 方法,该方法在子子 ClassB[ 中进一步被覆盖=38=] 并且它似乎也按预期工作。
- 在图像部分 3 中,中间 class ClassA 继承了 ClassASuper 并确实隐藏了 Display 方法,在子子 ClassB 中进一步被覆盖,这似乎是矛盾的。 --> 谁能解释一下这在幕后是如何工作的?
在第 3 节中,新的 Display
方法隐藏了从基础 class 继承的方法。它是新继承层次结构的起点。在这方面,它与具有另一个名称的全新方法没有任何区别。你可以这样写:
public virtual void NewDisplay()
{
...
}
并在 ClassA
和 ClassB
中覆盖这个。
因此,ClassASuper
类型的变量看不到这个新方法,因为它没有覆盖或实现原始方法。由于 ClassASuper.Display
未被覆盖,因此它会正确显示
Print from ClassASuper
如果要使用新方法,必须转换为 ClassA
(或 ClassB
):
((ClassA)classASuperA).Display();
((ClassA)classASuperB).Display();
- 在Image section 1中,中间class ClassA继承了 ClassASuper 但不会覆盖 Display 方法,而是在子子 中被覆盖ClassB 并且它似乎按预期工作。
- 在图像部分2中,中间classClassA继承了 ClassASuper 并覆盖 Display 方法,该方法在子子 ClassB[ 中进一步被覆盖=38=] 并且它似乎也按预期工作。
- 在图像部分 3 中,中间 class ClassA 继承了 ClassASuper 并确实隐藏了 Display 方法,在子子 ClassB 中进一步被覆盖,这似乎是矛盾的。 --> 谁能解释一下这在幕后是如何工作的?
在第 3 节中,新的 Display
方法隐藏了从基础 class 继承的方法。它是新继承层次结构的起点。在这方面,它与具有另一个名称的全新方法没有任何区别。你可以这样写:
public virtual void NewDisplay()
{
...
}
并在 ClassA
和 ClassB
中覆盖这个。
因此,ClassASuper
类型的变量看不到这个新方法,因为它没有覆盖或实现原始方法。由于 ClassASuper.Display
未被覆盖,因此它会正确显示
Print from ClassASuper
如果要使用新方法,必须转换为 ClassA
(或 ClassB
):
((ClassA)classASuperA).Display();
((ClassA)classASuperB).Display();