Dieser Fehler tritt auf, wenn Sie versuchen, aus einem statischen Kontext auf ein nicht statisches Mitglied (Feld, Methode oder Eigenschaft) zugreifen zu können, z. B. eine statische Methode oder eine statische Eigenschaft.
Szenario:
Stellen Sie sich diesen Code vor:
<code class="language-csharp">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) } }</code>
Lösungen:
Mehrere Ansätze können dies lösen:
Machen Sie das Mitglied statisch: , wechseln Sie gegebenenfalls auf das Mitglied, das zu static
zugegriffen wird. Dies funktioniert nur, wenn das Mitglied nicht auf instanzspezifische Daten angewiesen ist.
<code class="language-csharp">public static void UpdateLabel(string text) // Now static { // Access static members only here! You can't access myLabel directly. }</code>
Singleton -Muster: Verwenden Sie einen Singleton, um auf die Instanz Ihrer Klasse zuzugreifen. Dies ist geeignet, wenn Sie nur eine Instanz der Klasse benötigen.
<code class="language-csharp">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 }</code>
instanziieren Sie die Klasse: Erstellen Sie eine Instanz der Klasse innerhalb der statischen Methode.
<code class="language-csharp">private static void MyMethod(object sender, EventArgs e) { var form = new MyForm(); form.UpdateLabel(someValue); }</code>
Machen Sie die Aufrufmethode nicht statisch: Die einfachste Lösung besteht darin
<code class="language-csharp">private void MyMethod(object sender, EventArgs e) // Remains non-static { UpdateLabel(someValue); }</code>
Weitere Lesen:
Das obige ist der detaillierte Inhalt vonWie beheben Sie den C# CS0120 -Fehler: 'Eine Objektreferenz ist für das nichtstatische Feld, die Methode oder die Eigenschaft erforderlich'?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!