2010-01-27 68 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類,以便最小化耦合來進一步提高。

但最好的解決方法是將利用事件冒泡