如果我不更改它,为什么在 C# 中我需要指定要覆盖的方法的访问修饰符?在这种情况下根本不指定任何访问修饰符不是更简单、更合乎逻辑吗?
(澄清一下:我写这个问题不是因为我认为我比语言设计师更聪明,而是因为我确信他们有一个我还不能理解的充分理由。)
编辑:我不是在问为什么我们不能更改访问修饰符,而是在问为什么我们必须冗余地指定它。
如果我不更改它,为什么在 C# 中我需要指定要覆盖的方法的访问修饰符?在这种情况下根本不指定任何访问修饰符不是更简单、更合乎逻辑吗?
(澄清一下:我写这个问题不是因为我认为我比语言设计师更聪明,而是因为我确信他们有一个我还不能理解的充分理由。)
编辑:我不是在问为什么我们不能更改访问修饰符,而是在问为什么我们必须冗余地指定它。
虽然我不是语言设计者之一,但我认为强迫你指定它是完全合理的:
基本上,冗余有时是一件好事:)
为了说明 Jon 在代码中的观点,请考虑以下内容:
class LevelOne
{
public virtual void SayHi()
{
Console.WriteLine("Hi!");
}
}
class LevelTwo : LevelOne
{
override void SayHi()
{
Console.WriteLine("Hi!");
}
}
class LevelThree : LevelTwo
{
override void SayHi()
{
Console.WriteLine("Hi!");
}
}
无穷无尽。现在假设您处于派生类的 n 深度,您必须一直遵循继承层次结构回到原始基类以找出方法的访问修饰符。这简直太烦人了!
为了便于其他不编写代码的开发人员理解代码。当您阅读覆盖时,您知道您进行了多态性