覆盖方法中访问修饰符的用途是什么?

Max*_*kov 1 c# overriding language-design

为什么在C#am中我需要指定我覆盖的方法的访问修饰符,如果我不更改它?在这种情况下,根本不指定任何访问修饰符会不会更简单,更合乎逻辑?

(只是为了澄清:我写这个问题并不是因为我认为我比语言设计师更聪明,但因为我确信他们有充分的理由让我无法理解.)

编辑:我不是在问我们为什么不能改变访问修饰符,而是为什么我们必须冗余地指定它.

Jon*_*eet 6

虽然我不是语言设计师之一,但我认为强制您指定它是完全合理的:

  • 阅读代码的任何人都可以立即知道访问权限而无需检查原始声明
  • 对原始声明的访问的更改是这种方式的重大改变,使得覆盖代码更加明显
  • 它使得一个方法恰好覆盖了与非重写方法一致的更高声明.(对于没有访问修饰符的方法有时是公共的,有时是私有的,这取决于覆盖,这将是奇怪的.)

基本上,冗余有时是一件好事:)