Korrekter Zugriff auf Felder in Struct-Methoden
Bisher wurden Methoden erstellt, Daten an diese übergeben und ohne Probleme verwendet. Betrachten Sie jedoch ein Beispiel, bei dem der Name des Methodenparameters mit dem Namen eines Feldes innerhalb der Struktur kollidiert:
index.cs
1234567891011121314151617181920212223242526272829using 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)
ergibt, obwohl setValue(5, 7)
verwendet wurde.
Dies liegt daran, dass die Anweisung x = x
sehr mehrdeutig ist, da sowohl der Methodenparameter als auch das Strukturfeld den Namen x
tragen. Laut Compiler weist in der Anweisung x = x
der Methodenparameter x
den Wert x
erneut sich selbst zu, was logisch eine Null-Anweisung ist und daher nichts bewirkt.
Um dies zu beheben, wird das Schlüsselwort this
verwendet. Das Schlüsselwort this
teilt dem Compiler mit, dass auf das Feld der Struktur verwiesen wird.
Die Syntax lautet this.fieldName
. Der korrigierte Code sieht dann wie folgt aus:
index.cs
1234567891011121314151617181920212223242526272829using 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(); } }
Nun erkennt der Compiler, dass im Ausdruck x = x
das x
auf der linken Seite ein Strukturfeld ist, während das x
auf der rechten Seite ein Methodenparameter ist. Daher wird das Feld diesmal erfolgreich aktualisiert.
Das Schlüsselwort this
wird verwendet, um jegliche Mehrdeutigkeiten im Code zu lösen. Es ist allgemein eine gute Praxis, das Schlüsselwort this
immer zu verwenden, wenn auf Felder in Strukturmethoden zugegriffen wird.
Danke für Ihr Feedback!
Fragen Sie AI
Fragen Sie AI
Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen
Awesome!
Completion rate improved to 2.04
Korrekter Zugriff auf Felder in Struct-Methoden
Swipe um das Menü anzuzeigen
Bisher wurden Methoden erstellt, Daten an diese übergeben und ohne Probleme verwendet. Betrachten Sie jedoch ein Beispiel, bei dem der Name des Methodenparameters mit dem Namen eines Feldes innerhalb der Struktur kollidiert:
index.cs
1234567891011121314151617181920212223242526272829using 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)
ergibt, obwohl setValue(5, 7)
verwendet wurde.
Dies liegt daran, dass die Anweisung x = x
sehr mehrdeutig ist, da sowohl der Methodenparameter als auch das Strukturfeld den Namen x
tragen. Laut Compiler weist in der Anweisung x = x
der Methodenparameter x
den Wert x
erneut sich selbst zu, was logisch eine Null-Anweisung ist und daher nichts bewirkt.
Um dies zu beheben, wird das Schlüsselwort this
verwendet. Das Schlüsselwort this
teilt dem Compiler mit, dass auf das Feld der Struktur verwiesen wird.
Die Syntax lautet this.fieldName
. Der korrigierte Code sieht dann wie folgt aus:
index.cs
1234567891011121314151617181920212223242526272829using 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(); } }
Nun erkennt der Compiler, dass im Ausdruck x = x
das x
auf der linken Seite ein Strukturfeld ist, während das x
auf der rechten Seite ein Methodenparameter ist. Daher wird das Feld diesmal erfolgreich aktualisiert.
Das Schlüsselwort this
wird verwendet, um jegliche Mehrdeutigkeiten im Code zu lösen. Es ist allgemein eine gute Praxis, das Schlüsselwort this
immer zu verwenden, wenn auf Felder in Strukturmethoden zugegriffen wird.
Danke für Ihr Feedback!