Kursinhalt
C# Über die Grundlagen Hinaus
C# Über die Grundlagen Hinaus
Felder in Strukturmethoden Korrekt Zugreifen
Bisher haben wir Methoden erstellt, Daten in sie übergeben und sie ohne Probleme verwendet, aber betrachten Sie ein Beispiel, bei dem der Name des Methodenparameters mit dem Namen eines Feldes innerhalb der Struktur kollidiert:
index
using System; struct Coordinate { public int x; public int y; public void setValue(int x, int y) { x = x; y = y; } public void displayValue() { Console.WriteLine($"({x}, {y})"); } } class ConsoleApp { static void Main(string[] args) { Coordinate coord = new Coordinate(); coord.setValue(5, 7); coord.displayValue(); } }
Der Compiler zeigt in diesem Fall keinen Fehler an, jedoch ist das Programm logisch inkorrekt, da die Ausgabe des Programms (0, 0)
zeigt, obwohl wir setValue(5, 7)
verwendet haben.
Dies liegt daran, dass die Anweisung x = x
sehr mehrdeutig ist, da sowohl der Methodenparameter als auch das Strukturfeld den Namen x
haben. Laut dem Compiler weist in der Anweisung x = x
der Methodenparameter x
den Wert x
wieder sich selbst zu, was logisch eine Null-Anweisung ist und daher nichts bewirkt.
Um dies zu beheben, verwenden wir das this
Schlüsselwort. Das this
Schlüsselwort teilt dem Compiler mit, dass wir uns auf das Feld der Struktur beziehen.
Die Syntax lautet this.fieldName
. Der korrigierte Code sieht also folgendermaßen aus:
index
using System; struct Coordinate { public int x; public int y; public void setValue(int x, int y) { this.x = x; this.y = y; } public void displayValue() { Console.WriteLine($"({x}, {y})"); } } class ConsoleApp { static void Main(string[] args) { Coordinate coord = new Coordinate(); coord.setValue(5, 7); coord.displayValue(); } }
Jetzt weiß der Compiler, dass im Ausdruck x = x
das x
auf der linken Seite ein Strukturfeld ist, während x
auf der rechten Seite ein Methodenparameter ist, und daher wird das Feld diesmal erfolgreich aktualisiert.
Wir verwenden das Schlüsselwort this
, um Unklarheiten im Code zu lösen. Es ist allgemein eine gute Praxis, immer das Schlüsselwort this
zu verwenden, wenn auf Felder in Strukturmethoden zugegriffen wird.
Danke für Ihr Feedback!