c# - 下面的多级继承如何在 .Net5 中工作?
问题描述
- 在图像部分 1 中,中间类ClassA继承了ClassASuper但没有覆盖Display方法,而是在子子ClassB中被覆盖,它似乎按预期工作。
- 在图像第 2 节中,中间类ClassA继承了ClassASuper并覆盖了Display方法,该方法在子子ClassB中也被进一步覆盖,它似乎也按预期工作。
- 在图像第 3 节中,中间类ClassA继承了ClassASuper并隐藏了Display方法,该方法在子子ClassB中进一步被覆盖,似乎是矛盾的。-->有人能解释一下这是如何在幕后工作的吗?
解决方案
在第 3 节中,新Display
方法隐藏了从基类继承的方法。它是新继承层次结构的起点。在这方面,它与另一个名称的全新方法没有任何不同。你可以写例如:
public virtual void NewDisplay()
{
...
}
ClassA
并在and中覆盖这个ClassB
。
因此,类型变量ClassASuper
看不到这个新方法,因为它没有覆盖或实现原始方法。由于ClassASuper.Display
没有被覆盖,它确实正确显示
从 ClassASuper 打印
如果要使用新方法,则必须强制转换为ClassA
(或ClassB
):
((ClassA)classASuperA).Display();
((ClassA)classASuperB).Display();
推荐阅读
- excel - 当您在单元格中时运行宏?
- java - 我们如何使用 Retryable
- django-rest-framework - 如何将 API 密钥头注入 Django REST API 测试
- javascript - 从绘制边缘修复折线图
- google-cloud-platform - Syncinc 处的 Google Cloud Build/App 引擎错误
- split - 在 Informatica 中将平面文件字符串拆分为多列
- reactjs - 使用不同的状态变量名称会导致无限重新渲染
- javascript - JS 在几小时内获得 GMT 两次不同的问题
- javascript - 使用node js和express ejs使用href动态导航到另一个页面
- flutter - initialRoute 字符串已更改,但无论 initialRoute 字符串如何,我最终都会出现在同一页面