真实的例子很简单。有一个房子,房子有墙等。
class Room {
public List<Wall> Walls{get; set;}
}
class Wall {
public List<WallObject> WallObjects{get; set;}
}
现在,几年前,开发人员已将属性室添加到教室的墙上:
class Wall {
public List<WallObject> WallObjects{get; set;}
public Room Room{ get; set; }
}
在类里面有这个对象是非常令人愉快的。一个人可以在许多地方访问父元素(430)。但是我认为它不属于该目录,有时会导致错误,因为您没有设置或更改它。
除了在许多情况下的方法切换之外,还有其他方法吗?
最佳答案
没有很多方法可以轻松解决此问题,但是通常我会选择更改使用的列表类型,并使用适当的事件来注册和注销父项。
public class Room
{
public ObservableCollection<Wall> Walls { get; } = new ObservableCollection<Wall>();
public Room()
{
Walls.CollectionChanged += Walls_CollectionChanged;
}
private void Walls_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
{
switch (e.Action)
{
case NotifyCollectionChangedAction.Add:
{
foreach (Wall w in e.NewItems)
{
w.Room = this;
}
break;
}
case NotifyCollectionChangedAction.Remove:
{
foreach (Wall w in e.OldItems)
{
w.Room = null;
}
break;
}
}
}
}
关于c# - 子类中的父元素,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43782828/