Я не знаю, достаточно ли описательный вопрос, но почему и как это поведение существует?:
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 = ...
внутри содержащего класса, но создавая новые экземпляры и изменяя их извне, даже если они все еще находятся в пределах содержащего класса, не кажется хорошей практикой.
В чем причина этого?