Velden Correct Benaderen in Struct-Methoden
Tot nu toe zijn er methoden aangemaakt, gegevens doorgegeven en zonder problemen gebruikt, maar overweeg een voorbeeld waarbij de naam van de methodeparameter overeenkomt met de naam van een veld binnen de structuur:
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(); } }
De compiler geeft in dit geval geen foutmelding, maar het programma is logisch onjuist omdat de uitvoer van het programma (0, 0)
toont, zelfs wanneer setValue(5, 7)
is gebruikt.
Dit komt doordat de instructie x = x
erg dubbelzinnig is, aangezien zowel de methodeparameter als het structveld de naam x
hebben. Volgens de compiler wijst in de instructie x = x
de methodeparameter x
de waarde x
opnieuw aan zichzelf toe, wat logisch gezien een loze instructie is en dus niets doet.
Om dit op te lossen, gebruikt u het sleutelwoord this
. Het sleutelwoord this
geeft aan de compiler aan dat u verwijst naar het veld van de struct.
De syntaxis is this.fieldName
. De gecorrigeerde code ziet er als volgt uit:
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(); } }
Nu weet de compiler dat in de instructie x = x
, de x
aan de linkerkant een structveld is, terwijl de x
aan de rechterkant een methodeparameter is, en daarom wordt het veld deze keer succesvol bijgewerkt.
Gebruik het sleutelwoord this
om elke ambiguïteit in de code op te lossen. Het is over het algemeen een goede gewoonte om altijd het sleutelwoord this
te gebruiken bij het benaderen van velden in structmethoden.
Bedankt voor je feedback!
Vraag AI
Vraag AI
Vraag wat u wilt of probeer een van de voorgestelde vragen om onze chat te starten.
Can you show me an example of how to use the `this` keyword in a struct method?
Why is it important to use the `this` keyword in such cases?
Are there any other scenarios where the `this` keyword is necessary?
Awesome!
Completion rate improved to 2.04
Velden Correct Benaderen in Struct-Methoden
Veeg om het menu te tonen
Tot nu toe zijn er methoden aangemaakt, gegevens doorgegeven en zonder problemen gebruikt, maar overweeg een voorbeeld waarbij de naam van de methodeparameter overeenkomt met de naam van een veld binnen de structuur:
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(); } }
De compiler geeft in dit geval geen foutmelding, maar het programma is logisch onjuist omdat de uitvoer van het programma (0, 0)
toont, zelfs wanneer setValue(5, 7)
is gebruikt.
Dit komt doordat de instructie x = x
erg dubbelzinnig is, aangezien zowel de methodeparameter als het structveld de naam x
hebben. Volgens de compiler wijst in de instructie x = x
de methodeparameter x
de waarde x
opnieuw aan zichzelf toe, wat logisch gezien een loze instructie is en dus niets doet.
Om dit op te lossen, gebruikt u het sleutelwoord this
. Het sleutelwoord this
geeft aan de compiler aan dat u verwijst naar het veld van de struct.
De syntaxis is this.fieldName
. De gecorrigeerde code ziet er als volgt uit:
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(); } }
Nu weet de compiler dat in de instructie x = x
, de x
aan de linkerkant een structveld is, terwijl de x
aan de rechterkant een methodeparameter is, en daarom wordt het veld deze keer succesvol bijgewerkt.
Gebruik het sleutelwoord this
om elke ambiguïteit in de code op te lossen. Het is over het algemeen een goede gewoonte om altijd het sleutelwoord this
te gebruiken bij het benaderen van velden in structmethoden.
Bedankt voor je feedback!