C#-Codefehler: „Für den Zugriff auf ein nicht statisches Feld, eine Methode oder eine Eigenschaft ist eine Objektreferenz erforderlich“
Das bereitgestellte Code-Snippet löst einen Fehler in Klasse 2 (Implementierender Algorithmus) aus, da versucht wird, über eine statische Methode Main()
auf eine nicht statische Methode GetRandomBits()
zuzugreifen.
In der Main()
-Methode verursachte die Zeile Population[i].bits = GetRandomBits();
den Fehler. Das Problem besteht darin, dass GetRandomBits()
eine nicht statische Methode in der Klasse Program
ist, während Main()
eine statische Methode ist.
Lösung: statisch vs. nicht statisch
Lösung:
Program
-Klasse und rufen Sie GetRandomBits()
von dieser Instanz aus auf. <code class="language-csharp">// 创建 Program 实例 Program p = new Program(); // 从实例访问非静态方法 Population[i].bits = p.GetRandomBits();</code>
GetRandomBits()
statisch machen: Ändern Sie die static
-Methode in eine statische Methode, indem Sie das Schlüsselwort GetRandomBits()
vor der Methodendeklaration hinzufügen. <code class="language-csharp">public static string GetRandomBits() { // 在此处实现方法逻辑... }</code>
Welche Methode Sie wählen, hängt von Ihrem Programmdesign und dem Zweck der GetRandomBits()
Methode ab. Wenn GetRandomBits()
auf andere nicht statische Mitglieder der Klasse zugreifen muss, muss es die erste Methode (Instanz erstellen) verwenden. Wenn GetRandomBits()
nicht auf nicht statische Mitglieder der Klasse zugreifen muss, ist der zweite Ansatz (statisches Erstellen) sauberer. Denken Sie daran, dass die übermäßige Verwendung statischer Methoden dazu führen kann, dass Ihr Code weniger testbar und wartbar ist.
Das obige ist der detaillierte Inhalt vonWarum wird „Eine Objektreferenz ist erforderlich' angezeigt, wenn in C# eine nichtstatische Methode aus einer statischen Methode aufgerufen wird?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!