Korrekt Tilgang til Felt i Metode for Struct
Så langt har du laget metoder, sendt inn data til dem og brukt dem uten problemer, men vurder et eksempel der navnet på metodeparameteren kolliderer med navnet på et felt inne i strukturen:
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(); } }
Kompilatoren viser ingen feil i dette tilfellet, men programmet er logisk feil siden utdataene fra programmet viser (0, 0)
selv om du brukte setValue(5, 7)
.
Dette er fordi uttrykket x = x
er svært tvetydig, ettersom både metodeparameteren og strukturfeltet har navnet x
. Ifølge kompilatoren, i uttrykket x = x
, tildeler metodeparameteren x
verdien x
til seg selv igjen, noe som logisk sett er en null-operasjon og derfor ikke gjør noe.
For å løse dette bruker du nøkkelordet this
. Nøkkelordet this
forteller kompilatoren at du refererer til feltet i strukturen.
Syntaksen er this.fieldName
. Den korrigerte koden vil da se slik ut:
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(); } }
Nå vet kompilatoren at i uttrykket x = x
, er x
på venstre side et strukturfelt, mens x
på høyre side er en metodeparameter, og dermed blir feltet oppdatert riktig denne gangen.
Du bruker nøkkelordet this
for å løse enhver tvetydighet i koden. Det er generelt god praksis å alltid bruke nøkkelordet this
når du får tilgang til felt i strukturmetoder.
Takk for tilbakemeldingene dine!
Spør AI
Spør AI
Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår
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
Korrekt Tilgang til Felt i Metode for Struct
Sveip for å vise menyen
Så langt har du laget metoder, sendt inn data til dem og brukt dem uten problemer, men vurder et eksempel der navnet på metodeparameteren kolliderer med navnet på et felt inne i strukturen:
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(); } }
Kompilatoren viser ingen feil i dette tilfellet, men programmet er logisk feil siden utdataene fra programmet viser (0, 0)
selv om du brukte setValue(5, 7)
.
Dette er fordi uttrykket x = x
er svært tvetydig, ettersom både metodeparameteren og strukturfeltet har navnet x
. Ifølge kompilatoren, i uttrykket x = x
, tildeler metodeparameteren x
verdien x
til seg selv igjen, noe som logisk sett er en null-operasjon og derfor ikke gjør noe.
For å løse dette bruker du nøkkelordet this
. Nøkkelordet this
forteller kompilatoren at du refererer til feltet i strukturen.
Syntaksen er this.fieldName
. Den korrigerte koden vil da se slik ut:
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(); } }
Nå vet kompilatoren at i uttrykket x = x
, er x
på venstre side et strukturfelt, mens x
på høyre side er en metodeparameter, og dermed blir feltet oppdatert riktig denne gangen.
Du bruker nøkkelordet this
for å løse enhver tvetydighet i koden. Det er generelt god praksis å alltid bruke nøkkelordet this
når du får tilgang til felt i strukturmetoder.
Takk for tilbakemeldingene dine!