C# 靜態方法無法訪問非靜態成員的錯誤及解決方案
錯誤:需要對象引用
以下代碼片段演示了這個問題:
namespace WindowsApplication1 { public partial class Form1 : Form { ... private static void SumData(object state) { ... setTextboxText(result); // 错误:非静态字段、方法或属性 } } }
問題原因
錯誤信息表明,靜態方法 SumData
試圖調用非靜態成員 setTextboxText
。靜態方法只能訪問靜態成員,而訪問非靜態成員需要一個指向所屬類的對象的引用。
解決方案
有多種方法可以解決此錯誤:
setTextboxText
方法設為靜態:public static void setTextboxText(int result)
然而,如果 setTextboxText
方法需要訪問實例變量,則無法將其設為靜態。
Form1
的靜態單例調用 setTextboxText
:class Form1 { public static Form1 Instance; // 单例 ... private static void SumData(object state) { ... Instance.setTextboxText(result); } }
在 Form1
的構造函數中,需要將 Instance
設置為當前實例:Instance = this;
。
Form1
實例:private static void SumData(object state) { ... Form1 frm1 = new Form1(); frm1.setTextboxText(result); }
如果 Form1
的實例已經存在,此方法可能不適用。
SumData
設為非靜態實例方法 (屬於 Form1
):private void SumData(object state) { ... setTextboxText(result); }
這通常是最佳的解決方案,因為它保持了代碼的封裝性和可維護性。
更多信息,請參考 MSDN 文檔。
以上是為什麼靜態方法無法在C#中訪問非靜態成員?的詳細內容。更多資訊請關注PHP中文網其他相關文章!