首頁 > 後端開發 > C++ > 為什麼C#中靜態方法呼叫非靜態方法時出現「需要物件參考」?

為什麼C#中靜態方法呼叫非靜態方法時出現「需要物件參考」?

DDD
發布: 2025-01-22 05:24:16
原創
213 人瀏覽過

Why Does

C# 程式碼錯誤:「需要物件參考才能存取非靜態欄位、方法或屬性」

提供的程式碼片段在類別 2(實作演算法)中引發錯誤,原因是嘗試從靜態方法 Main() 存取非靜態方法 GetRandomBits()

Main() 方法中,Population[i].bits = GetRandomBits(); 這一行導致了錯誤。問題在於 GetRandomBits()Program 類別中的非靜態方法,而 Main() 是靜態方法。

解:靜態與非靜態

  • 非靜態方法:必須從類別的實例(物件)呼叫。
  • 靜態方法:可以直接從類別名稱調用,無需建立實例。

解決方法:

  1. 建立實例:建立 Program 類別的實例,並從該實例呼叫 GetRandomBits()
<code class="language-csharp">// 创建 Program 实例
Program p = new Program();

// 从实例访问非静态方法
Population[i].bits = p.GetRandomBits();</code>
登入後複製
  1. GetRandomBits() 設定為靜態:透過在方法宣告前加上 static 關鍵字,將 GetRandomBits() 方法修改為靜態方法。
<code class="language-csharp">public static string GetRandomBits()
{
    // 在此处实现方法逻辑...
}</code>
登入後複製

選擇哪一種方法取決於你的程式設計和 GetRandomBits() 方法的用途。如果 GetRandomBits() 需要存取類別的其他非靜態成員,則必須使用第一種方法(建立實例)。如果 GetRandomBits() 不需要存取類別的非靜態成員,則第二種方法(將其設為靜態)會更簡潔。 記住,過度使用靜態方法可能會降低程式碼的可測試性和可維護性。

以上是為什麼C#中靜態方法呼叫非靜態方法時出現「需要物件參考」?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板