ReSharperは、public
クラスのabstract
コンストラクターのアクセシビリティをprotected
に変更することを提案していますが、その背後にある理論的根拠については述べていません。
光を当てることができますか?
公開されているという理由だけで、抽象クラスでは意味がありません。定義上、抽象クラスを直接インスタンス化することはできません。派生型のインスタンスによってのみインスタンス化できます。したがって、コンストラクターにアクセスする必要がある唯一の型はその派生型であり、したがって保護はパブリックよりもはるかに理にかなっています。アクセシビリティをより正確に説明します。
抽象クラスでコンストラクターをpublic
ではなくprotected
にした場合、技術的には何の違いもありません。コンストラクターのアクセシビリティ/可視性はまったく同じです。同じクラスまたは派生クラスです。 2つのキーワードは、すべての意図と目的に対して区別できない効果をもたらします。
したがって、この選択はスタイルの問題にすぎません。オブジェクト指向に精通した人々を満足させるには、protected
と入力します。
Reflectionには、デフォルトでpublic
の場合にのみコンストラクターが含まれますが、とにかくそのコンストラクターを呼び出すことはできません。
IntelliSenseは、public
と入力するとnew
コンストラクターを表示しますが、とにかくそのコンストラクターを呼び出すことはできません。
アセンブリのメタデータは、コンストラクターがパブリックまたは保護されているという事実を反映します。