在Silverlight / C#中,我有一个Main类,它创建了一个Child实例,Child _child = new Child(...)
现在,在Child类中,我需要从Main类调用一个方法。最好的方法是什么?事件
答案 0 :(得分:7)
最简单的解决方案是为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
接口后面抽象掉{{1}}类来进一步改进,以便最小化耦合。
但最好的解决方案是利用事件冒泡
答案 1 :(得分:4)
答案取决于呼叫的语义;你的例子含糊不清,没有明显的语义来推理,所以不可能给出一个好的答案。
主要为儿童提供服务吗?例如,Child想要做什么电话主要是“让我获得有权做的事情的用户列表”,或“将11月份的所有应收账款加起来”?
或主要对与儿童相关的事件作出反应?例如,也许Child是一个按钮,Main是一个表单,Main希望在单击按钮时做出反应。
在前一种情况下,Main应该向Child提供一个实现所需服务的对象 - 可能是它自己。对象可能是Main本身,也可能是方法或接口的委托,但是当需要服务时,Child可以调用它。
在后一种情况下,Main应该听取Child提出的事件。
哪个是正确的取决于对象的含义;你能更清楚地描述其含义吗?
答案 2 :(得分:3)
事件是正确的模式。有关对象/类层次结构中信息流的概念原因,请参阅this answer。
更深层的组件只是简单地“释放”他们的信息 - 通常是通过一个事件 - 并且它“浮出”链而不直接调用