2010-06-02 87 views
0

如何在另一個功能中使用對象?使用多功能對象

main() 
{ 
    private void button1_click { 

    MyClass object = new MyClass(); 
    object.blabla(); 

    } 

    private void button2_click { 

    // how can i use object from button1_click ?? 

    } 
} 

回答

0

使object成爲定義函數的類的成員變量。

main() 
{ 
    private MyClass object; 

    private void button1_click { 

    object = new MyClass(); 
+1

基本上答案,所以我不想複製,但你可能想詳細說明......? – 2010-06-02 12:45:34

4

通過將對象存儲在函數的作用域之外。

main() 
{ 
    MyClass obj; 

    private void button1_click 
    { 
    obj = new MyClass(); 
    obj.blabla(); 
    } 

    private void button2_click 
    { 
    //maybe check for null etc 
    obj.dosomethingelse(); 
    } 
} 
+3

這是正確的 - 但請記住,如果您在其中一個方法中初始化新的MyClass,那麼您將必須檢查它是否已在使用它的其他方法中進行了初始化。 在構造函數中初始化MyClass對象可能會更好,您可以確信它始終爲非null。 (假設這是可能的。)您也可以考慮爲它創建一個屬性,並在使用它時進行延遲加載。 – 2010-06-02 12:49:02

1

基本上這是一個更基本的問題,這是可以解決的如

class program 
{ 
    void Main(string[] args) 
    { 
     private MyClass FooInstance; 
     private void button1_click() 
     { 
     // TODO be defensive: check if this.FooInstance is assigned before, to not override it! 
     this.FooInstance = new MyClass(); 
     this.FooInstance.blablabla(); 
     } 

     private void button2_click() 
     { 
     // TODO add some null check aka make sure, that button1_click() happened before and this.FooInstance is assigned 
     this.FooInstance = ....; 
     } 
    } 
} 

您也可以選擇延遲加載作爲一個選項(由安德魯·安德森提到的)

+0

+1對於實際使用正確的語法,而不是試圖聲明一個名爲「對象」的變量... – 2010-06-02 12:49:04

+0

:)你可以,但它應該寧願陳述'@ object' – 2010-06-02 12:52:48