为什么在C#am中我需要指定我覆盖的方法的访问修饰符,如果我没有更改它?在这种情况下,根本不指定任何访问修饰符会不会更简单,更合乎逻辑?
(只是为了澄清:我写这个问题不是因为我认为我比语言设计师更聪明,但因为我确信他们有充分的理由让我无法理解。)
编辑:我不是在问为什么我们不能改变访问修饰符,而是为什么我们必须冗余地指定它。
答案 0 :(得分:6)
虽然我不是语言设计师之一,但我认为强制您指定它是完全合理的:
基本上,冗余有时是一件好事:)
答案 1 :(得分:2)
为了说明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!");
}
}
无限广告。现在假设您处于派生类的深度,您必须遵循继承层次结构一直回到原始基类,以找出该方法的访问修饰符。那简直太烦人了!
答案 2 :(得分:1)
为了便于另一位不编写代码的开发人员理解代码。 当你读取覆盖时,你知道你创造了多态性