【发布时间】:2010-01-27 15:21:10
【问题描述】:
在 Silverlight / C# 中,我有 Main 类,它创建 Child 的一个实例,Child _child = new Child(...)
现在,在 Child 类中,我需要从 Main 类调用一个方法。最好的方法应该是什么?活动?
【问题讨论】:
标签: c# parent-child method-call
在 Silverlight / C# 中,我有 Main 类,它创建 Child 的一个实例,Child _child = new Child(...)
现在,在 Child 类中,我需要从 Main 类调用一个方法。最好的方法应该是什么?活动?
【问题讨论】:
标签: c# parent-child method-call
最简单的解决方案是将Main 的引用提供给Child 类的实例:
public class Child
{
private Main main;
public Child(Main main)
{
this.main = main;
main.Bar();
}
}
public class Main
{
public void Foo()
{
Child c = new Child(this);
}
public void Bar()
{
}
}
这可以通过在IMain 接口后面抽象出Main 类来进一步改进,以最小化耦合。
但最好的解决方案是利用事件冒泡
【讨论】:
答案取决于调用的语义是什么;你的例子含糊不清,没有明显的语义可以推理,所以不可能给出一个好的答案。
Main 是否向 Child 提供服务?例如,Child 想要在 Main 上执行的调用是“给我获取授权执行 blah 的用户列表”还是“将 11 月的所有应收账款加起来”?
或者 Main 对事件的反应与 Child 相关联?例如,也许 Child 是一个按钮,而 Main 是一个表单,而 Main 希望在单击按钮时做出反应。
在前一种情况下,Main 应该向 Child 提供一个对象(可能是它自己)来实现所需的服务。对象可能是 Main 本身,也可能是方法的委托或接口,但它是 Child 在需要服务时可以调用的东西。
在后一种情况下,Main 应该监听 Child 引发的事件。
哪个是正确的取决于对象的含义;能把意思描述清楚一点吗?
【讨论】:
三项赛是正确的模式。请参阅this answer,了解有关对象/类层次结构中信息流的概念原因。
更深层的组件只是简单地“发布”它们的信息——通常是通过一个事件——并且它在不直接调用的情况下“浮动”到链上
【讨论】: