c# - 抽象类必须重写抽象方法吗?
问题描述
假设这个抽象类:
abstract public class MyBase {
abstract public int GetValue();
<some concrete methods here>
}
现在我想继承它作为另一个抽象类,实现GetValue()
但添加新的抽象方法:
abstract public class MyBase2 : MyBase {
abstract public int GetValue2();
public override int GetValue() {
// some code here
return something;
}
}
为什么我必须指定override
for MyBase2.GetValue()
?是不是MyBase.GetValue()
已经标记为abstract
,因此自然会被任何继承自的东西覆盖MyBase
?
解决方案
为什么我必须为 MyBase2.GetValue() 指定覆盖?
这也是 C++ 采用的范式。
这个想法是:通过明确需要使用关键字override
and virtual
,abstract
您将确保在进行覆盖时不会打错字。因为如果你看到这样的错字,行为,特别是 onvirtual
会发生显着变化。
话说回来; 我仍然觉得奇怪的是new
添加方法的关键字仍然是可选的,并且只在省略时发出警告。
推荐阅读
- c# - C# 二进制文件发布请求
- talend - 如何在 Talend 中将特定字符串转换为日期
- android - Xamarin:无法从 Windows VM 连接到在 Mac 上运行的虚拟 Android 设备
- r - 使用下拉框选择过滤 Plotly 条形图
- python - 计算二维数组中的出现次数
- python - 如何将值更改为零但不在循环的第一次迭代中
- javascript - Javascript 运行时错误:TypeError:无法获取未定义或空引用的属性“拆分”
- python - Plotly Choropleth 在某个值后切断
- linux - ubuntu上的颤振错误:找不到命令
- c# - C# 中的 RealmMigrationNeededException 仅添加一个属性