将属性传播到父控件C#

将属性传播到父控件C#,c#,winforms,properties,controls,propagation,C#,Winforms,Properties,Controls,Propagation,有没有办法将属性从子控件传播到父控件,这样我就可以访问像-parent.Property1这样的属性,而不是parent.child.Property1?我不能使用继承-我的父类型不能扩展为子类型-它是从不同的类继承的 此外,我不想为每个属性从子属性添加代码到父属性,如: public object Property1 { get{ return Child.Property1; } set{ ChildProperty1 = value; } } 也许使用反射-类似这样的东西 p

有没有办法将属性从子控件传播到父控件,这样我就可以访问像-
parent.Property1
这样的属性,而不是
parent.child.Property1
?我不能使用继承-我的父类型不能扩展为子类型-它是从不同的类继承的

此外,我不想为每个属性从子属性添加代码到父属性,如:

public object Property1
{
   get{ return Child.Property1; }
   set{ ChildProperty1 = value; }
}
也许使用反射-类似这样的东西

public PropertyInfo[] Properties
{
  get{ return Child.GetType().GetProperties(); }
  set{ Child.GetType().GetProperties().SetValue() = value.GetValue()}
}

谢谢

无需更改父对象,但您不需要继承子对象,只需通过属性即可:

在父项中:

public object Property1
{
    get { return Child.Property1; }
    set { Child.Property1 = value; }
}
然后您还可以通过
Parent.Property1
访问
Parent.Child.Property1


编辑:因为您刚刚编辑了您的问题,不想这样做,然后返回到“不,这是不可能的。”

好吧,这是你面临的非常古老的设计问题——在C#中没有明确的解决方案。
这通常是通过包装子属性(正如大家已经指出的那样)来解决的,这可能会很乏味——或者b)公开子属性,这通常不是最好的方式。
我不建议你反思,因为你真的不想这么做。撇开性能不谈(可能不会注意到,在小型应用程序上,但如果你采用这种编码方式,它很快就会困扰你),这只会导致糟糕的设计、凌乱的代码和难以理解的问题,例如,你不知道在何处和谁可以使用反射来更改其他部分或访问-你不想对“自己的代码”这样做(在这种情况下),只有在被迫使用其他代码的情况下,或者在某些情况下(并非罕见,每一个较大的代码位中都有某种反射,但有一个很好的理由),这就保证了,也就是说,您没有其他方式来做事情,比如穿越泛型非泛型世界,获取动态属性等

话虽如此,
你可以重新设计一些东西,通常是为了以其他方式实现你想要的东西。
例如,通过使用接口和间接公开子级,或移动对象,使拥有属性的类在需要使用属性时/在需要使用属性的位置处于“链中”的正确位置。
i、 e.很难解释这一点——因为这需要一个非常具体的场景,然后是一个非常具体的解决方案——但通常情况下,你总是有某种“成功的设计”来解决这些问题,而你面临这样一个问题的事实通常意味着……
1) 对于手头的问题,您可能没有以最佳方式组织类,并且您被迫尝试传播属性,而不是在类之间重新安排职责,
2) 或者你只是遇到了这样一种情况,没有其他办法可以解决:)…

... 希望这对一些人有所帮助

我在提问前几分钟将其写进了我的问题:)只需将属性添加到父类中,由获取者返回子属性。这是正确的方法,你一定考虑过了。太多了暴露孩子是不太合适的方式。