真实的例子很简单。有一个房子,房子有墙等。

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/

10-10 04:00