c#エラーCS0120:オブジェクト参照が必要
このエラーは、「非定位フィールド、メソッド、またはプロパティにオブジェクト参照が必要です...」は、静的メソッド内から非静的メンバーにアクセスしようとするときに発生します()。 提供されたコードを調べてみましょう:
setTextboxText
SumData
問題は、静的メンバーと非静的メンバーの根本的な違いにあります:
namespace WindowsApplication1 { public partial class Form1 : Form { // ... other code ... private static void SumData(object state) { // ... some code to calculate 'result' ... setTextboxText(result); // Error occurs here } // ... other code ... including setTextboxText method ... } }
SumData
Form1
これを修正する主な方法は2つあります:setTextboxText
1。 static:
を作成します 本質的にインスタンス固有のデータまたはのメンバーへのアクセスを必要としない場合、静的にすることができます:
setTextboxText
UI関連のメソッドを作成する静的は、スレッドの問題につながり、コードの維持が難しくなる可能性があるため、一般的に推奨されます。
setTextboxText
Form1
2。非静的な方法(推奨)から
public static void setTextboxText(int result) { // Code to update the textbox. This might require accessing the textbox // statically (e.g., if it's a public static member of Form1). This is often // not ideal for UI elements. }
これは、よりクリーンでより一般的なソリューションです。 仲介者として行動するには非静的な方法が必要です:
private void UpdateTextbox(int result) { setTextboxText(result); // This is now safe } private static void SumData(object state) { // ... calculate 'result' ... // Access the Form1 instance using a delegate or other mechanism // (see examples below) this.BeginInvoke(new Action(() => UpdateTextbox(result))); //Example using BeginInvoke for UI thread safety }
::Form1
のメソッド内から呼び出されている場合、<上記の例に示すように)SumData
を直接使用できます。
SumData
namespace WindowsApplication1 { public partial class Form1 : Form { // ... other code ... private static void SumData(object state) { // ... some code to calculate 'result' ... setTextboxText(result); // Error occurs here } // ... other code ... including setTextboxText method ... } }
SumData
が呼び出されている場合:Form1
SumData
インスタンスへの参照をSumData
に渡す方法が必要です。 これには、それをアプリケーションのコンテキストに最適なソリューションを選択し、UI要素を扱うときは常にスレッドの安全性を優先することを忘れないでください。 非静的な仲介方法と適切なスレッドを使用したオプション2は、一般に最も堅牢で保守可能なソリューションです。
以上が静的方法から非静的な方法を呼び出すのはなぜ「オブジェクト参照が必要です」と呼ぶのですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。