2011-01-20 47 views
1

我正在爲一所學校的項目(去獨聯體的我的學士學位)工作,我遇到過這個問題一個類的功能。C#「非靜態字段需要對象引用」靜態成員函數的類問題

public static int GetNumberCreated() 
    { 
     // return the total number of airplanes created using the class as the blueprint 

     return numberCreated; // returns the number of airplanes created 
    }//end of public int GetNumberCreated() 

這是一個程序,以返回迄今在這個小型C#程序中製作的飛機數量的值。 我宣佈numberCreated開頭:

private int numberCreated; 

我得到的經典錯誤「的對象引用需要非靜態字段,方法或屬性的」我做的研究試圖找出一個像樣的量發生了什麼事情,但我什麼都沒有得到。

,但我卻在類的底部設置一個屬性,這樣一種形式將能夠訪問該變量:

public int NumberCreated { get; set; } 

我也試圖改變的財產,以這樣的:

public int NumberCreated { get { return numberCreated; } set { numberCreated = value; } } 

沒有運氣。 >'

我在做什麼錯?

回答

5

您需要將您創建的數字聲明爲靜態。

eg public static int NumberCreated {get;set;} 

您可以從非靜態方法訪問靜態成員,但不能從靜態方法訪問非靜態成員。例如,實例變量不能從靜態方法訪問。

+0

謝謝^ _ ^'我無法相信這就是我所缺少的。哥們,謝啦。 – 2011-01-20 15:25:02

1

這是一個簡單的事情 - 你需要你的方法簽名之前添加的「靜態」的關鍵字,比如:

public static int NumberCreated { get; set; } 

然後你就可以增加/減少,像這樣:

AirplaneFactory.NumberCreated++/AirplaneFactory.NumberCreated-- 
1

GetNumberCreated是一種靜態方法。 numberCreated是一個用這個類的對象創建的變量。所以,靜態方法不知道在哪裏看,因爲沒有這樣的變量。

您需要一個private static int

0

簡而言之,即使「numberCreated」尚未生成,也可以調用靜態方法。編譯器告訴你,你正在試圖在沒有任何事先保證它已經出生的情況下返回一個嬰兒。

更改編號創建爲一個靜態屬性,它將編譯。

相關問題