首頁 > 後端開發 > C++ > 為什麼靜態方法無法在C#中訪問非靜態成員?

為什麼靜態方法無法在C#中訪問非靜態成員?

Susan Sarandon
發布: 2025-02-02 17:46:09
原創
298 人瀏覽過

C# 靜態方法無法訪問非靜態成員的錯誤及解決方案

Why Can't a Static Method Access Non-Static Members in C#?

錯誤:需要對象引用

以下代碼片段演示了這個問題:

namespace WindowsApplication1
{
    public partial class Form1 : Form
    {
        ...

        private static void SumData(object state)
        {
            ...
            setTextboxText(result); // 错误:非静态字段、方法或属性
        }
    }
}
登入後複製

問題原因

錯誤信息表明,靜態方法 SumData 試圖調用非靜態成員 setTextboxText。靜態方法只能訪問靜態成員,而訪問非靜態成員需要一個指向所屬類的對象的引用。

解決方案

有多種方法可以解決此錯誤:

  1. setTextboxText 方法設為靜態:
public static void setTextboxText(int result)
登入後複製

然而,如果 setTextboxText 方法需要訪問實例變量,則無法將其設為靜態。

  1. 通過 Form1 的靜態單例調用 setTextboxText:
class Form1
{
    public static Form1 Instance;   // 单例

    ...

    private static void SumData(object state)
    {
        ...
        Instance.setTextboxText(result);
    }
}
登入後複製

Form1 的構造函數中,需要將 Instance 設置為當前實例:Instance = this;

  1. 在調用方法中創建一個 Form1 實例:
private static void SumData(object state)
{
    ...
    Form1 frm1 = new Form1();
    frm1.setTextboxText(result);
}
登入後複製

如果 Form1 的實例已經存在,此方法可能不適用。

  1. 將調用方法 SumData 設為非靜態實例方法 (屬於 Form1):
private void SumData(object state)
{
    ...
    setTextboxText(result);
}
登入後複製

這通常是最佳的解決方案,因為它保持了代碼的封裝性和可維護性。

更多信息,請參考 MSDN 文檔。

以上是為什麼靜態方法無法在C#中訪問非靜態成員?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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