簡體   English   中英

C#“非靜態字段需要對象引用”,靜態成員函數的類問題

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM