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 文檔。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3