抽象クラスがあり、保護されたコンストラクターで読み取り専用フィールドを初期化したいと思います。この読み取り専用フィールドを派生クラスで使用できるようにしたいと思います。
すべてのフィールドをプライベートにしてプロパティを公開するという私の習慣に従って、これを次のように実装しました。
abstract class Foo
{
private readonly int _field;
protected Foo(int field)
{
_field = field;
}
protected int Field
{
get { return _field; }
}
}
しかし、私はここでフィールドをプライベートに保つことの本当に多くの利点があるのだろうかと思いました。私はプロパティの利点を認識しており、この問題に関して一般的にいくつかのSOの質問がありますが、それらは保護されたフィールドではなく、パブリックフィールドに焦点を当てています。
では、以下の実装に切り替える必要がありますか?どちらの場合でも知っておくべき考慮事項と長所/短所は何ですか?
abstract class Foo
{
protected readonly int _field;
protected Foo(int field)
{
_field = field;
}
}