Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Leer Velden Correct Benaderen in Struct-Methoden | Structs & Enumerators
C# Verder dan de Basis

bookVelden 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

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

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

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

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.

question mark

Welk sleutelwoord wordt gebruikt om ambiguïteit te elimineren bij het verwijzen naar velden binnen methoden van een klasse?

Select the correct answer

Was alles duidelijk?

Hoe kunnen we het verbeteren?

Bedankt voor je feedback!

Sectie 2. Hoofdstuk 6

Vraag AI

expand

Vraag AI

ChatGPT

Vraag wat u wilt of probeer een van de voorgestelde vragen om onze chat te starten.

Suggested prompts:

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

bookVelden 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

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

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

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

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.

question mark

Welk sleutelwoord wordt gebruikt om ambiguïteit te elimineren bij het verwijzen naar velden binnen methoden van een klasse?

Select the correct answer

Was alles duidelijk?

Hoe kunnen we het verbeteren?

Bedankt voor je feedback!

Sectie 2. Hoofdstuk 6
some-alt