[英]C# “An object reference is required for the non-static field,” Class issue with Static Member Function
我正在為一個學校項目工作(即將獲得CIS的學士學位),並且遇到了帶有班級功能的問題。
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#程序中制造了多少架飛機的值。 我在一開始就聲明numberCreate:
private int numberCreated;
我收到經典錯誤消息:“非靜態字段,方法或屬性需要對象引用”。我已經做了相當多的研究,試圖弄清楚到底是怎么回事,但我什么也沒想出來。
但是,我確實在類的底部設置了一個屬性,以便表單可以訪問該變量:
public int NumberCreated { get; set; }
我還嘗試將屬性更改為此:
public int NumberCreated { get { return numberCreated; } set { numberCreated = value; } }
沒有運氣。 >。>'
我究竟做錯了什么?
您需要將創建的int數字聲明為靜態。
eg public static int NumberCreated {get;set;}
您可以從非靜態方法訪問靜態成員,但不能從靜態方法訪問非靜態成員。 例如,實例變量不能從靜態方法訪問。
這很簡單-您需要在方法簽名之前添加“ static”關鍵字,如下所示:
public static int NumberCreated { get; set; }
然后,您可以像這樣遞增/遞減:
AirplaneFactory.NumberCreated++ / AirplaneFactory.NumberCreated--
GetNumberCreated
是一個靜態方法。 numberCreated
是使用此類的對象創建的變量。 因此,靜態方法不知道在哪里查看,因為沒有這樣的變量。
您需要一個private static int
。
簡而言之,即使尚未創建“ numberCreated”,也可以調用您的靜態方法。 編譯器告訴您,您正在試圖返回嬰兒而沒有任何事先保證。
將numberCreated更改為靜態屬性,它將進行編譯。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.