.NETのプログラミング言語はC#だけではありません。他の言語では、さまざまなコンテキストで異なるデフォルトのアクセシビリティを使用できます。指定private
すると、コードを読む人にはそのようなアクセシビリティが意図されていることが明確になりますが、仕様を省略すると、メンバーがアセンブリ内で使用できるようになっていたかどうかなどの疑問が残ります(VB.NETのデフォルトのように)。 。異なるルールで複数の言語を使用する場合、明示的であることは特に役立ちます。
かどうかに関してprivate
、またはprotected
他の賛成で特に魅力的な引数が存在しない状態で支持されるべきで、決定はそれは、派生クラスは、その便利な何かをするためにメンバーを暴露することを可能にすることがより可能性があるかどうかに基づくべきですそれ以外の場合は不可能であるか、またはクラスの将来のバージョンが内部データ構造をより効率的な方法で変更するのを妨げます。で両方の状況の例を見ることができますList<T>
。
場合によっては、集計(Point
構造など)のリストがある場合、アイテムをインプレースで更新すると便利な場合があります。場合はList<T>
、派生クラスにそのバッキングストアを暴露、人は簡単に定義することができEditableList<T>
方法で:
delegate void ActByRef<T1,T2>(ref T1 p1, ref T2 p2);
void ActOnItem<TParam>(int index, ref TParam param, ActByRef<TParam> proc)
{
.. test index, then...
proc(ref _arr[index], ref proc);
}
次に、次のようなものを使用して呼び出すことができます。
int adjustmentAmount = ...;
myList.ActOnItem(index, ref adjustmentAmount,
(ref Point pt, ref int dx) => pt.X += dx );
このような方法では、比較的大きな構造タイプでも効率的な更新が可能になります(コピーが不要なため)。List<T>
内部を公開しないという事実は、そのような演算子を効率的に実装できるクラスを派生させることを不可能にします。
反対に、私が知っている限り、Microsoftはまだこの機能を利用していませんが、バッキングストアをプライベートにすると、の将来のバージョンでList<T>
、ほとんどのデータを使用するときに、バッキングストアを85K未満の断片に分割できるようになります。タイプ、またはを使用する場合は1000アイテム未満double
。List<T>
バッキングストアを派生クラスに公開している場合、このような分割は不可能です。