c# - 从子元素引用父元素的值

标签 c# oop

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

child :

 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; }
}

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

最佳答案

Is there a more streamlined way to reference the parent in this case? Or am I doomed to sending the entire parent to the child, just to modify one value in the parent?

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

但是,

您基本上可以通过以下 3 种方式之一完成此操作

  1. 传递来自 parent 的具体引用或接口(interface)。
  2. 使用事件/委托(delegate)/操作并注册然后在更新时触发它们
  3. 或者解耦的发布/订阅消息系统或中介

你做的很好,虽然都有缺点,而且在不同方面都很麻烦

最现代的方法是解耦消息系统,这在您不想将 View 模型和类耦合在一起的 View 模型中很常见。但是,对于琐碎的情况,这很可能是矫枉过正。

同样, Action 和事件也有它们的位置。 parent (或某人)订阅和取消订阅(嗯......应该)。

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

关于c# - 从子元素引用父元素的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55253402/

相关文章:

c# - 在 C# 中使用表达式创建通用委托(delegate)

c# - 尝试创建类 Toast 通知,无法多次实例化它

c# - 用数据绑定(bind) DevExpress.XtraEditors.TextEdit 控件上的空字符串替换 '01-01-0001'

c# - 如何使用 C# 打开谷歌浏览器窗口(仅页面)

c++ - 对象在返回之前被销毁

Javascript OOP 最佳实践?

c++ - 从函数返回具有常量成员的对象的方法

c# - 为什么有些对象不能从不同的线程访问?

php - 点在PHP类名中

java - 匿名与命名内部类? - 最佳实践?