ホームページ > バックエンド開発 > C++ > C#CS0120エラーを解決する方法:「非定位フィールド、方法、またはプロパティにはオブジェクト参照が必要です」?

C#CS0120エラーを解決する方法:「非定位フィールド、方法、またはプロパティにはオブジェクト参照が必要です」?

Linda Hamilton
リリース: 2025-02-02 17:56:09
オリジナル
437 人が閲覧しました

How to Resolve the C# CS0120 Error:

C#CS0120エラー:「非静的フィールド、方法、またはプロパティ「foo '」にオブジェクト参照が必要です」

このエラーは、静的メソッドや静的プロパティなど、静的コンテキスト内から非静的なメンバー(フィールド、方法、またはプロパティ)にアクセスしようとすると発生します。

シナリオ: このコードを想像してみてください:

public partial class MyForm : Form
{
    private void MyMethod(object sender, EventArgs e)
    {
        // Error: Accessing a non-static member from a static method
        UpdateLabel(someValue); 
    }

    private void UpdateLabel(string text)
    {
        myLabel.Text = text; // myLabel is a non-static member (control)
    }
}
ログイン後にコピー
ソリューション:

いくつかのアプローチはこれを解決できます:

  1. メンバーを静的にします:

    必要に応じて、アクセスしているメンバーをに変更します。 これは、メンバーがインスタンス固有のデータに依存していない場合にのみ機能します。 static

    public static void UpdateLabel(string text) // Now static
    {
        // Access static members only here!  You can't access myLabel directly.
    }
    ログイン後にコピー
  2. シングルトンパターン:
  3. シングルトンを使用して、クラスのインスタンスにアクセスします。 これは、クラスの1つのインスタンスのみが必要な場合に適しています。

    public partial class MyForm : Form
    {
        private static MyForm _instance; // Singleton instance
    
        public static MyForm Instance
        {
            get { return _instance ?? (_instance = new MyForm()); }
        }
    
        private MyForm() { } // Private constructor
    
        private void MyMethod(object sender, EventArgs e)
        {
            Instance.UpdateLabel(someValue); 
        }
    
        // UpdateLabel remains non-static
    }
    ログイン後にコピー
    クラスをインスタンス化します:
  4. 静的メソッド内でクラスのインスタンスを作成します。
  5. 呼び出し方法を非静的にする:
    private static void MyMethod(object sender, EventArgs e)
    {
        var form = new MyForm();
        form.UpdateLabel(someValue);
    }
    ログイン後にコピー
    最も単純な解決策は、多くの場合、非静的メンバーを非静的なメンバーと呼ぶメソッドにすることです。
  6. さらなる読み取り:

    private void MyMethod(object sender, EventArgs e) // Remains non-static
    {
        UpdateLabel(someValue); 
    }
    ログイン後にコピー
    詳細については、CS0120エラーに関するMicrosoftのドキュメントを参照してください。

    各ソリューションの意味を慎重に検討してください。 適切なアプローチを選択することは、アプリケーションの設計とコードの特定のコンテキストによって異なります。

    以上がC#CS0120エラーを解決する方法:「非定位フィールド、方法、またはプロパティにはオブジェクト参照が必要です」?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート