首页 > 解决方案 > 下面的多级继承如何在 .Net5 中工作?

问题描述

  1. 在图像部分 1 中,中间类ClassA继承了ClassASuper但没有覆盖Display方法,而是在子子ClassB中被覆盖,它似乎按预期工作。
  2. 在图像第 2 节中,中间类ClassA继承了ClassASuper并覆盖了Display方法,该方法在子子ClassB中也被进一步覆盖,它似乎也按预期工作。
  3. 在图像第 3 节中,中间类ClassA继承了ClassASuper并隐藏了Display方法,该方法在子子ClassB中进一步被覆盖,似乎是矛盾的。-->有人能解释一下这是如何在幕后工作的吗?

在此处输入图像描述

标签: c#.netoop.net-5

解决方案


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

public virtual void NewDisplay()
{
   ...
}

ClassA并在and中覆盖这个ClassB

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

从 ClassASuper 打印

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

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

推荐阅读