1

C# で、オーバーライドするメソッドのアクセス修飾子を変更しないのに指定する必要があるのはなぜですか? このような状況では、アクセス修飾子をまったく指定しない方が簡単で論理的ではないでしょうか?

(明確にするために、私がこの質問を書いているのは、私が言語設計者よりも頭がいいと思っているからではなく、まだ理解できない正当な理由があると確信しているからです。)

編集: アクセス修飾子を変更できない理由についてではなく、重複して指定する必要がある理由について質問しています。

4

3 に答える 3

6

私は言語設計者の 1 人ではありませんが、次のように指定するように強制することは完全に合理的だと思います。

  • 元の宣言を確認しなくても、コードを読んだ人はすぐにアクセスを知ることができます
  • 元の宣言へのアクセスへの変更は、このように互換性を破る変更であり、オーバーライド コードにとってより明確になります。
  • オーバーライドしないメソッドと一貫性のあるより高い宣言をたまたまオーバーライドするメソッドを作成します。(オーバーライドに応じて、アクセス修飾子のないメソッドがパブリックになる場合とプライベートになる場合があるのは奇妙です。)

基本的に、冗長性は時々良いことです:)

于 2013-03-27T16:48:26.370 に答える
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!");
    }
}

無限に。派生クラスの n 層にいるとします。メソッドのアクセス修飾子を見つけるには、継承階層をたどって元の基本クラスまでさかのぼる必要があります。それは単に迷惑です!

于 2013-03-27T16:53:49.703 に答える
1

コードを書かない別の開発者がコードを理解しやすくするため。オーバーライドを読むと、ポリモーフィズムを作成していることがわかります

于 2013-03-27T16:48:18.220 に答える