Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lernen Korrekter Zugriff auf Felder in Struct-Methoden | Strukturen & Aufzählungstypen
C# Jenseits der Grundlagen

bookKorrekter 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

index.cs

copy
1234567891011121314151617181920212223242526272829
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) 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

index.cs

copy
1234567891011121314151617181920212223242526272829
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(); } }

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.

question mark

Welches Schlüsselwort wird verwendet, um Mehrdeutigkeiten beim Verweis auf Felder innerhalb von Klassenmethoden zu beseitigen?

Select the correct answer

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 2. Kapitel 6

Fragen Sie AI

expand

Fragen Sie AI

ChatGPT

Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen

Awesome!

Completion rate improved to 2.04

bookKorrekter 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

index.cs

copy
1234567891011121314151617181920212223242526272829
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) 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

index.cs

copy
1234567891011121314151617181920212223242526272829
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(); } }

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.

question mark

Welches Schlüsselwort wird verwendet, um Mehrdeutigkeiten beim Verweis auf Felder innerhalb von Klassenmethoden zu beseitigen?

Select the correct answer

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 2. Kapitel 6
some-alt