Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lernen Felder in Strukturmethoden Korrekt Zugreifen | Strukturen & Enumeratoren
C# Über die Grundlagen Hinaus
course content

Kursinhalt

C# Über die Grundlagen Hinaus

C# Über die Grundlagen Hinaus

1. Zusätzliche Strukturen & Dateiverarbeitung
2. Strukturen & Enumeratoren
3. Einführung in die Objektorientierte Programmierung (OOP)
4. OOP Essentials
5. OOP-Prinzipien

book
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:

cs

index

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) 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:

cs

index

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

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.

Welches Schlüsselwort wird verwendet, um Unklarheiten beim Referenzieren von Feldern innerhalb von Klassenmethoden zu beseitigen?

Welches Schlüsselwort wird verwendet, um Unklarheiten beim Referenzieren von Feldern innerhalb von Klassenmethoden zu beseitigen?

Wählen Sie die richtige Antwort aus

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 2. Kapitel 6
We're sorry to hear that something went wrong. What happened?
some-alt