Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 引用父项';来自子元素的值_C#_Oop - Fatal编程技术网

C# 引用父项';来自子元素的值

C# 引用父项';来自子元素的值,c#,oop,C#,Oop,我试图找到一种更优雅的方法来设置c#中父对象的属性。我当前将父元素传递到子元素中,并以这种方式引用它。这看起来既麻烦又可能不正确 孩子: public class ValidatedField<T> { public OpenIssues parent { get; set; } //Other values public void Highlight() { parent.isNot

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

孩子:

 public class ValidatedField<T>
    {
        public OpenIssues parent { get; set; } 
        //Other values
        public void Highlight()
        {
            parent.isNotValid = true;
            isHighlighted = true;
        }
    }
public类ValidatedField
{
公开发布父项{get;set;}
//其他价值观
公共空间突出显示()
{
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; }
}
公共类开放问题
{
公开发行
{
DateAppalFiled=新的ValidatedField(此字段);
}
公共bool无效{get;set;}
公共ValidatedField DateAppelFiled{get;set;}
}
在这种情况下,是否有更简化的方法来引用父级?或者我注定要将整个父对象发送给子对象,只是为了修改父对象中的一个值

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

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

但是,

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

  • 从您的父级传递一个具体的引用或接口
  • 使用事件/委托/操作并注册,然后在更新时触发它们
  • 或者一个解耦的发布/订阅消息传递系统或中介
  • 你所做的一切都很好,尽管都有其缺点,而且在不同的方面都很麻烦

    最现代的方法是解耦的消息传递系统,这在viewmodels中很常见,因为您不想将视图模型和类耦合在一起。然而,对于琐碎的情况来说,这很可能是过火了

    同样,行动和事件也有自己的位置。家长(或某人)订阅,然后取消订阅(嗯……应该)


    然而,如果您不介意父级和子级的紧密耦合,并且如果不需要在不同的父子配置中使用它们,那么只需使用引用即可。没有造成伤害

    基本上,家长电话没有什么问题。这就是它存在的原因。如果您有一个带有按钮列的telerik网格,并且需要按钮中的网格id,则需要执行以下操作:RadGrid RadGrid=(RadGrid)((ImageButton)source.Parent.Parent.Parent.Parent;当您有多个共享公共类的网格时,您会遇到这种情况。是的,它看起来很迟钝,但这是最简单的方法。这可能是一个愚蠢的问题,但从类的名称来看,我认为
    ValidatedField
    应该对某些数据执行某种验证,而该验证将从
    OpenIssues
    类调用。如果是这种情况,为什么不让验证方法简单地返回一个
    bool
    ,并将
    OpenIssues
    类的
    isNotValid
    设置为验证方法的结果呢?我不认为我可以为每个类请求代码示例。看到它们并排在一起可能会帮助我们缩小最小/最麻烦的范围!我将从那里标出正确答案。