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