从子元素引用父元素的值

时间:2019-03-20 04:00:13

标签: c# oop

我试图找出一种更优雅的方法来在c#中设置父对象的属性。我目前将父级传递给子元素,并以这种方式引用它。这看起来既麻烦又可能不正确。

孩子:

 public class ValidatedField<T>
    {
        public OpenIssues parent { get; set; } 
        //Other values
        public void Highlight()
        {
            parent.isNotValid = true;
            isHighlighted = true;
        }
    }

还有父母:

public class OpenIssues
{
    public OpenIssues()
    {
        DateAppealFiled = new ValidatedField<DateTime?>(this);
    }
    public bool isNotValid { get; set; }
    public ValidatedField<DateTime?> DateAppealFiled { get; set; }
}

在这种情况下,是否还有更简化的方式来引用父项?还是我注定要将整个父级发送给孩子,只是为了修改父级中的一个值?

1 个答案:

答案 0 :(得分:3)

  

在这种情况下,是否还有更简化的方式来引用父项?   还是我注定要把整个父母送给孩子,只是为了   修改父项中的一个值?

整个父级(用您的话来说)只是引用/指针的几个字节

但是

您基本上可以通过以下三种方式之一进行操作

  1. 传递父母的具体参考或界面。
  2. 使用事件/委托/操作并注册,然后在更新时触发它们
  3. 或者解耦的发布/订阅消息系统或中介

您所做的一切都很好,尽管它们都有缺点,并且以不同的方式繁琐

最现代的方法是去耦消息传递系统,这在视图模型中很常见,因为您不想将视图模型和类耦合在一起。但是,这对于琐碎的情况很可能是过大的杀伤力。

动作和事件也有自己的位置。父母(或某人)订阅,然后退订(嗯...应该)。

但是,如果您不介意父子之间的紧密耦合,并且几乎不需要在不同的父子配置中使用它们,则只需使用引用即可。没有伤害。