C# 父子类关系设计模式

C# 父子类关系设计模式,c#,.net,design-patterns,C#,.net,Design Patterns,我有一个类,它有一个子项列表。是否有可以复制的设计模式可以应用于这些类,以便可以从子类访问父类实例,并强制执行规则,例如不能将子类添加到多个父类,等等 尝试复合设计模式: 要使用它,您必须添加一些代码,以便将树向上移动到它看起来像的父级,但除此之外,它应该可以工作 只需添加一个属性,当父元素添加到树中时,该属性保存对父元素的引用。如果父节点发生更改,请将其更新,如果节点被删除,请将其设置为null。例如,您可以在任何语言的分层字典的帮助下,通过使用复合设计模式实现父(面板)子(按钮)关系!下面

我有一个类,它有一个子项列表。是否有可以复制的设计模式可以应用于这些类,以便可以从子类访问父类实例,并强制执行规则,例如不能将子类添加到多个父类,等等

尝试复合设计模式:

要使用它,您必须添加一些代码,以便将树向上移动到它看起来像的父级,但除此之外,它应该可以工作


只需添加一个属性,当父元素添加到树中时,该属性保存对父元素的引用。如果父节点发生更改,请将其更新,如果节点被删除,请将其设置为null。

例如,您可以在任何语言的分层字典的帮助下,通过使用复合设计模式实现父(面板)子(按钮)关系!下面是示例python代码

panel=DictObject(“panel”) button=window.addChild('按钮')
textfield=button.addChild('Text')

可能是这样的吗

public class Parent
{
   public Parent()
   {
     _children = new List<Child>();
    }

   private IList<Child> _children;
   public IEnumerable<Child> Children
   {
     get
     {
       return _children;
     }
   }

   public void Add(Child child)
{
    if (_children.Contains(child)) return;
    if (child.Parent != null && child.Parent !=this) throw new Exception ("bla bla bla");
    _children.Add(child);
    child.Parent = this;
}

public void Remove (Child child)
{
   child.Parent = null;
   _children.Remove(child)
{

}

public class Child
{
  public Parent Parent
  {
     get { return _parent;}
     protected internal set { _parent = value;}
}
公共类父类
{
公共家长()
{
_children=新列表();
}
私人儿童;
可数儿童的公共教育
{
得到
{
返回儿童;
}
}
公共无效添加(子项)
{
如果(_children.Contains(child))返回;
如果(child.Parent!=null&&child.Parent!=this)抛出新异常(“blablablabla”);
_添加(child);
child.Parent=this;
}
公共无效删除(子项)
{
child.Parent=null;
_儿童。移除(儿童)
{
}
公营儿童
{
公共家长
{
获取{return\u parent;}
受保护的内部集{u parent=value;}
}