2012-10-30 127 views
0

所以,這可能是什麼應該是什麼樣的孩子的問題,但我有困難找出執行以下的最佳方式。如何給內部類訪問外部類的屬性

說我有一個廚房,我想發出一個命令來打開我的烤麪包,所以我會叫這樣的事情在一個按鈕單擊事件:

private void buttonToaster_On_Click(object sender, EventArgs e) 
{ 
    myKitchen.Toaster.Activate(); 
} 

我想象做的是如下所示。然而,在C#中,它說,我必須使RelayBoard「的MyStuff」靜態。如果由於某種原因,我想控制多臺廚房用這個,我寧願不使這個靜態的,但我會怎麼做,所以我可以實例化一個廚房,有一個relayboard,討論到的所有內容,並創建根據該家電訪問RelayBoard「myStuff」來寫入命令的廚房?

class Kitchen 
{ 
    RelayBoard myStuff = new RelayBoard(); 

    Appliance Toaster = new Appliance(); 
    Appliance Coffee_Maker = new Appliance(); 


    class Appliance 
    { 
    void Activate() 
    { 
     myStuff.WriteCommand(ApplianceAddress, 1); 
    } 

    void Deactivate() 
    { 
     myStuff.WriteCommand(ApplianceAddress, 0); 
    } 
    } 

} 
+0

可能重複的[這是什麼訪問在從嵌套類封閉類的控制的最佳方式?](HTTP:// stackoverflow.com/questions/185124/whats-the-best-way-of-accessing-the-control-in-the-enclosing-class-from-the-nes) – nawfal

回答

2

簡單地將它傳遞到廚房對象的引用:的

class Appliance 
{ 
    private Kitchen _parent; 
    public Appliance(Kitchen parent) { _parent = parent; } 
    void Activate() 
    { 
    _parent.myStuff.WriteCommand(ApplianceAddress, 1); 
    } 

    void Deactivate() 
    { 
    _parent.myStuff.WriteCommand(ApplianceAddress, 0); 
    } 
} 
+0

這是我看到的可能有一點,但我擔心它會實例化多個廚房(每個設備一個)。此外,在嵌套類中創建外部類的實例的想法就好像試圖吸取真空吸塵器本身。這會不會僅供參考,主廚房,還是會令每個設備內廚房的多個副本? – Xantham

+1

@Xantham:不要創建外部類的新實例。只需傳入外部類的參考。烤麪包機=新設備(本); –