質問が十分に説明的であるかどうかはわかりませんが、なぜ、どのようにこの動作が存在するのですか?:
public class Layer
{
public string Name { get; set; }
private IEnumerable<Layer> children;
public IEnumerable<Layer> Children
{
get { return this.children.Where ( c => c.Name != null ).Select ( c => c ); }
set { this.children = value; }
}
public Layer ( )
{
this.children = new List<Layer> ( ); // Fine
Layer layer = new Layer ( );
layer.children = new List<Layer> ( ); // Isn't .children private from the outside?
}
}
layer.Children
どこからでもアクセスできますが、layer.children
プライベートなのでどうすればアクセスできますか?
Layer layer = new Layer ( );
layer.children = new List<Layer> ( );
コードがLayer
クラス内にある場合にのみ機能します。アクセスが外部からのものであっても、それが包含クラスの内部で行われる場合、プライベート変数へのアクセスを異なる方法で処理するための特別なコードはありますか?
私は使用する理由を知っています:
this.children = ...
包含クラス内にありますが、新しいインスタンスを作成して外部から変更することは、それらがまだ包含クラス内にある場合でも、良い習慣とは思えません。
これを許可する理由は何ですか?