在 Silverlight / C# 中,我有一个 Main 类,它创建一个 Child 实例,Child _child = new Child(...)
现在,在 Child 类中,我需要从 Main 类中调用一个方法。最好的方法应该是什么?事件?
在 Silverlight / C# 中,我有一个 Main 类,它创建一个 Child 实例,Child _child = new Child(...)
现在,在 Child 类中,我需要从 Main 类中调用一个方法。最好的方法应该是什么?事件?
最简单的解决方案是提供对类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()
{
}
}
这可以通过在接口Main
后面抽象类来进一步改进,IMain
以最小化耦合。
但最好的解决方案是利用事件冒泡
答案取决于调用的语义是什么;您的示例含糊不清,没有明显的语义可以推理,因此不可能给出一个好的答案。
Main 是否为 Child提供服务?例如,Child 想要在 Main 上执行的调用是“获取我有权执行 blah 的用户列表”,还是“将 11 月的所有应收账款加起来”?
还是 Main对与 Child 相关的事件做出反应?例如,也许 Child 是一个按钮,而 Main 是一个表单,而 Main 希望在单击按钮时做出反应。
在前一种情况下,Main 应该向 Child 提供一个实现所需服务的对象——可能是它自己。该对象可能是 Main 本身,或者是方法的委托或接口,但它是 Child 在需要服务时可以调用的东西。
在后一种情况下,Main 应该监听 Child 引发的事件。
哪个是正确的取决于对象的含义;你能更清楚地描述意思吗?
三项赛是正确的模式。有关对象/类层次结构中信息流的概念原因,请参阅此答案。
更深层次的组件只是简单地“发布”它们的信息——通常是通过一个事件——它在链上“浮动”而不直接调用