2011-08-25 68 views
2

我有一個表單,它有一個創建一個新對象的按鈕,並將其稱爲start()方法。在另一個方法中創建的方法中停止對象的正確方法是什麼?

該程序工作正常,但是,我現在想創建一個停止按鈕。我顯然不能像其他地方那樣調用對象的stop()方法,但是,我只是想不出改變我的代碼的正確方法。

正如我寫這篇文章,我能想到的最好的事情是把MyObject myo = new MyObject("test");MyObject myo;放在類的頂部,在方法外,然後嘗試從類中設置它。

你會在這種情況下怎麼辦?

+0

start是什麼?異步進程的啓動,還是阻塞直到啓動結束? – JNappi

+0

AFAIK,它是異步/在後臺因爲我可以調用/執行其他代碼...它是一個監視器,直到停止()被調用纔會停止。 – wil

回答

3

這一切都取決於範圍。

如果您希望窗體在任何時候都能夠看見該對象,將其作爲私有/受保護成員放置在窗體對象內可能是一條好路線。 (確保它不爲空,但。

class MyForm 
{ 
    private MyObject myobject; 

    private MyForm(){ 
    // create the object 
    myobject = new MyObject; 
    } 

    private void Start_Click(){ 
    myobject.start(); 
    } 
    private void Stop_Click(){ 
    myobject.stop(); 
    } 
} 

如果該對象被不斷提及,你可以遵循singleton pattern

如果這是一件基於[AN /中]參數,你可以重新創建( s)傳遞給構造,你可以在需要的時候重新創建它。

3

這正是你應該做的。它被稱爲創建成員變量。

但請確保您不要撥打myo.stop()myonull

+0

唯一的問題是我只知道如何通過它的構造函數來獲得這個對象...'MyObject myo = new MyObject(「string」)'...如果我在其他地方創建它,我怎樣稱它爲構造函數,或者我必須找到另一個繞過它嗎? – wil

+0

只需將新對象分配給成員變量即可。 –

+0

*史詩facepalm *我在晚上編寫它的責任!非常感謝你 - 完美的作品。 – wil

3

你是對的。您必須將對象引用存儲在某個位置,以便稍後可以調用其「停止」方法。

相關問題