从子类调用方法

时间:2010-01-27 15:21:10

标签: c# parent-child method-call

在Silverlight / C#中,我有一个Main类,它创建了一个Child实例,Child _child = new Child(...)

现在,在Child类中,我需要从Main类调用一个方法。最好的方法是什么?事件

3 个答案:

答案 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

  

更深层的组件只是简单地“释放”他们的信息 - 通常是通过一个事件 - 并且它“浮出”链而不直接调用