0

有什么方法可以将属性从子控件传播到父控件 - 所以我可以访问属性 -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()}
}

谢谢

4

2 回答 2

2

不改变父不改变,但你不需要继承孩子,你可以通过属性:

在父级中:

public object Property1
{
    get { return Child.Property1; }
    set { Child.Property1 = value; }
}

然后您也可以Parent.Child.Property1通过访问Parent.Property1

编辑:当您刚刚编辑您的问题时,您不想那样做,然后回到“不,这是不可能的。”!

于 2012-03-24T11:12:45.140 回答
0

嗯,这是您面临的非常古老的设计问题 - 在 C# 中没有明确的解决方案。
这通常通过包装子属性来解决(正如所有人已经指出的那样),这可能很乏味 - 或者 b)暴露一个孩子,这通常不是最好的方法。
我不建议您进行反思,因为您真的不想这样做。抛开性能不谈(在小型应用程序上可能不会注意到,但如果你采用这种编码风格,它很快就会回来困扰你),这只会导致糟糕的设计、混乱的代码和难以理解,例如你不知道在哪里以及谁可以使用反射来更改其他部分或访问-您不想对“自己的代码”(在这种情况下)执行此操作,只有在强制使用其他代码或在某些情况下才通常这样做情况(并不罕见,每一个较大的代码都有某种反映,但有充分的理由)保证了这一点,即你没有其他的做事方式,比如跨越通用的非通用世界,获取动态属性等。

话虽如此,
您通常可以重新设计一些东西以通过其他方式实现理想的目标。
例如,通过使用接口并间接暴露一个孩子 - 或四处移动,以便拥有属性的类在您需要使用属性时/在哪里使用属性时位于“链中”的正确位置。
也就是说,这很难解释——因为这需要一个非常具体的场景,然后是一个非常具体的解决方案——但通常你总是有某种“成功的设计”来解决这些问题,而且你面临这样一个事实问题通常意味着..
1)你可能没有以最好的方式组织课程来解决手头的问题,而且你'
2)或者你只是有这样的情况,没有其他办法解决它:) ...
...希望这有助于一些

于 2012-03-24T12:53:10.073 回答