このエラーは、静的メソッドや静的プロパティなど、静的コンテキスト内から非静的なメンバー(フィールド、方法、またはプロパティ)にアクセスしようとすると発生します。
シナリオ: このコードを想像してみてください:
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) } }
いくつかのアプローチはこれを解決できます:
必要に応じて、アクセスしているメンバーをに変更します。 これは、メンバーがインスタンス固有のデータに依存していない場合にのみ機能します。
static
public static void UpdateLabel(string text) // Now static { // Access static members only here! You can't access myLabel directly. }
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 }
呼び出し方法を非静的にする:
private static void MyMethod(object sender, EventArgs e) { var form = new MyForm(); form.UpdateLabel(someValue); }
さらなる読み取り:
private void MyMethod(object sender, EventArgs e) // Remains non-static { UpdateLabel(someValue); }
各ソリューションの意味を慎重に検討してください。 適切なアプローチを選択することは、アプリケーションの設計とコードの特定のコンテキストによって異なります。
以上がC#CS0120エラーを解決する方法:「非定位フィールド、方法、またはプロパティにはオブジェクト参照が必要です」?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。