gpt4 book ai didi

C#:将 child 添加到集合中并在同一调用中设置 child 的 parent

转载 作者:行者123 更新时间:2023-11-30 22:43:19 24 4
gpt4 key购买 nike

我正在构建一种领域层,我希望能够实现以下方法:

[注意:根据使用 .Equals() 的检查,ISet 是一个不允许重复的集合类。]

public class Parent
{
public ISet Children = new HashedSet<Child>;
public void AddChild()
{
...
}
public void RemoveChild()
{
...
}
}

public class Child
{
public Parent Parent
{
get {...} set {...}
}
}

这样才能通过以下测试:

当 parent.AddChild(child) 被调用时:

  • parent.Children 包含 child。
  • child.Parent 设置为父级。
  • 如果 child 有一个以前的 Parent,那么 Parent 的 Children 集合不再包含 child

当调用 parent.RemoveChild(child) 时:

  • child.Parent == null.
  • parent.Children 不包含 child。

设置 child.Parent 相当于调用 parent.AddChild()。当 child 有一个现有的 parent 时,设置 child.Parent = null 等同于调用 parent.RemoveChild()。

可是我好像真的做不到!

这一定是领域层中非常常见的逻辑,例如使用NHibernate,所以我想知道其他人是怎么做到的?

最佳答案

像这样在 child 身上使用属性和变量

private Parent _parent;
public Parent parent {
get { return _parent; }
set {
if(_parent == value)
return; //Prevents circular assignement
if(null != _parent) {
Parent temp = _parent;
_parent = null;
temp.removeChild(this);
}
if(null != value) {
_parent = value;
value.addChild(this);
}
}
}

这将导致设置子项的父属性将调用父方法,并且所有其他逻辑都可以放在这些方法中。

父级应该检查子级的父级属性是否需要更改,但如果尝试再次设置相同的父级,set 方法也会退出。增强现实

关于C#:将 child 添加到集合中并在同一调用中设置 child 的 parent ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4016165/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com