2010-01-27 50 views
1

在Silverlight/C#中,我有类为主,其中创建小孩,儿童_child =新的儿童(...)的实例现在从子类中调用方法

,在儿童类我需要调用一个方法从主类。最好的办法是什么?活动?

回答

4

答案取决于什么呼叫的语义;你的例子是模糊的,并没有明显的语义来推理,所以不可能给出一个好的答案。

为主提供服务给孩子?举例来说,就是孩子想上主像“给我拿谁被授权做嗒嗒用户列表”或“加起来所有应收十一月账户”做电话吗?

或者是主要反应与儿童assocaited事件?例如,Child可能是一个按钮,Main是一个窗体,Main会希望在点击按钮时作出反应。

在前一种情况下,Main应该向实现所需服务的Child提供一个对象 - 可能本身。该对象可能是Main本身,也可能是方法或接口的委托,但它是Child在需要服务时可以调用的东西。

在后一种情况下,主要应听取儿童引发的事件。

这是正确的取决于含义的对象;你能更清楚地描述意思吗?

+0

主要是的MainPage,一个用户的控制。孩子是代表场景中的物体的类。我想调用一个Main的子方法,它改变了一些MainPage参数。该调用取决于用户交互 – jose 2010-01-27 16:35:09

3

三项赛是适当的图案。关于对象/类层次结构中围绕信息流的概念原因,请参阅this answer

更深部件简称为“释放”他们的信息 - 通常是通过一个事件 - 它“浮”链向上而不直接调用

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() 
    { 
    } 
} 

这可以通过抽象掉一个IMain接口后面Main类,以便最小化耦合来进一步提高。

但最好的解决方法是将利用事件冒泡