下面的多级继承在 .Net5 中是如何工作的?

How is the below multilevel inheritance working in .Net5?

  1. 在Image section 1中,中间class ClassA继承了 ClassASuper 但不会覆盖 Display 方法,而是在子子 中被覆盖ClassB 并且它似乎按预期工作。
  2. 在图像部分2中,中间classClassA继承了 ClassASuper 并覆盖 Display 方法,该方法在子子 ClassB[ 中进一步被覆盖=38=] 并且它似乎也按预期工作。
  3. 在图像部分 3 中​​,中间 class ClassA 继承了 ClassASuper 并确实隐藏了 Display 方法,在子子 ClassB 中进一步被覆盖,这似乎是矛盾的。 --> 谁能解释一下这在幕后是如何工作的?

在第 3 节中,新的 Display 方法隐藏了从基础 class 继承的方法。它是新继承层次结构的起点。在这方面,它与具有另一个名称的全新方法没有任何区别。你可以这样写:

public virtual void NewDisplay()
{
   ...
}

并在 ClassAClassB 中覆盖这个。

因此,ClassASuper 类型的变量看不到这个新方法,因为它没有覆盖或实现原始方法。由于 ClassASuper.Display 未被覆盖,因此它会正确显示

Print from ClassASuper

如果要使用新方法,必须转换为 ClassA(或 ClassB):

((ClassA)classASuperA).Display();
((ClassA)classASuperB).Display();