2013-08-17 60 views
0

我有一個我定義的對象,我定義了我的對象的類有一個變量。此變量的類型與此類相同,請參閱下面的內容:c#對象定義中的面向對象編程

public class _car 
{ 
    public _car() 
    { 
    } 

    _car BMW = null; 
} 
. 
. 
. 

注意最後一行是對象機器的全局定義。 我的問題是,如果在沒有位於_car類中的方法確實是這樣的:

public another_Class 
{ 

    public another_class() 
    { 
    } 
    public _car machine = new _car(); 

    public int this_Methode() 
    { 

     if (Machine.BMW == null){ 
      Machine.BMW = new _car(); 
      return 1; 
     } 
     return 0; 
    } 

公共無效main_Methode(){

 int i=this_Methode(); 
     i+=this_Methode(); 
     //We run main_method in somewhere in our program now you say i is 0 or 1 or2 ? 
    } 

} 

覺得這樣//我們運行main_method現在你告訴我我的價值?是0還是1或2?

+0

只要'_car'的實例存在,字段'BMW'就會存在。它是否爲空將取決於該實例是否有賦值給它的值。順便說一句,如果在課程外部訪問該值,我建議使用屬性而不是字段。 – Tim

+0

「你還活着」和「使用代碼」是什麼意思? (「非空」,分別稱爲「 – oddparity

+0

」全球「是什麼意思?在C#中沒有全局變量這樣的事情。你的變量甚至不是靜態的。這意味着你需要一個對象引用來訪問它。只要有對象參考,也會提及「寶馬」,它不會被處理掉。 –

回答

1

要在編輯後作出迴應:

這其中Machine.BMW是來自目前尚不清楚。但是,如果它在運行時可用,那麼它將由以下方法填充。因此,第一次運行時,它將返回1 I.

public int this_Methode() 
{ 

    if (Machine.BMW == null){ 
     Machine.BMW = new _car(); 
     return 1; 
    } 
    return 0; 
} 

    int i=this_Methode(); //i = 1 as new car was created. 

    i+=this_Methode(); Unless there is some other code running, this_Methode() will return zero as the car was already created. 

you tell me i's value? Is 0 or 1 or 2?它會根據你在代碼中顯示什麼是1。但是,如果有其他鱈魚影響Machine.BMW並將其設置爲空,那麼它將是2.

我喜歡在Visual Studio中創建一個測試項目來嘗試這些類型的東西。有一個名爲Visual Studio Express的免費版本,您可以使用它。只需創建一個控制檯應用程序並嘗試一下。這將有助於快速回答這些問題,因爲您可以嘗試一下,看看它是否按預期工作。我總是這樣做,當有些事情不按照我認爲應該的方式工作時。

Greg

1

它看起來像你想了解更多關於C#和類。讓我給你幾件可以幫助你的事情。這不是對您的問題的直接回答,因爲需要更多信息才能正確回答。但是一般情況下可以幫助你解決問題,並讓你澄清問題:

在你的班級裏,屬性_car沒有使用寶馬實例進行初始化,所以在創建新實例時它將爲空。

然後,您也行public _car machine = new _car()

此行是最有可能的一個類裏面,因爲你不能把它僅僅在它自己的一個C#文件。如果這來自Console.App,它可能位於主程序中,因此它在啓動時運行,然後在運行時可用於應用程序的其餘部分。

在其他類中,您有一種方法可以檢查BMW是否爲空,如果不是,則會創建一輛新車。寶馬將永遠是空的,因爲它以前沒有創建過。

所以即使你有「全局」變量,「another_class」也沒有直接引用它,所以它不會看到它。所以我認爲你的問題的答案是它將永遠是空的,而不是「活的」。

+0

我現在根據你的報價改變了問題我等待幫助 – alex