Korrekt Adgang til Felter i Struct-Methods
Indtil nu har du oprettet metoder, overført data til dem og brugt dem uden problemer, men overvej et eksempel, hvor navnet på metodeparameteren kolliderer med navnet på et felt inde 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 fejl i dette tilfælde, men programmet er logisk forkert, da outputtet af programmet viser (0, 0)
, selvom du brugte setValue(5, 7)
.
Dette skyldes, at udsagnet x = x
er meget tvetydigt, da både metodeparameteren og strukturens felt har navnet x
. Ifølge kompilatoren tildeler metodeparameteren x = x
værdien x
til sig selv igen i udsagnet x
, hvilket logisk set er en tom handling og derfor ikke gør noget.
For at løse dette bruger du nøgleordet this
. Nøgleordet this
fortæller kompilatoren, at du henviser til feltet i strukturen.
Syntaksen er this.fieldName
. Så den rettede kode vil se sådan ud:
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 ved compileren, at i sætningen x = x
, er x
på venstre side et struct-felt, mens x
på højre side er en metodeparameter, og derfor bliver feltet opdateret korrekt denne gang.
Du bruger nøgleordet this
for at løse enhver tvetydighed i koden. Det er generelt god praksis altid at bruge nøgleordet this
, når felter tilgås i struct-metoder.
Tak for dine kommentarer!
Spørg AI
Spørg AI
Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat
Awesome!
Completion rate improved to 2.04
Korrekt Adgang til Felter i Struct-Methods
Stryg for at vise menuen
Indtil nu har du oprettet metoder, overført data til dem og brugt dem uden problemer, men overvej et eksempel, hvor navnet på metodeparameteren kolliderer med navnet på et felt inde 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 fejl i dette tilfælde, men programmet er logisk forkert, da outputtet af programmet viser (0, 0)
, selvom du brugte setValue(5, 7)
.
Dette skyldes, at udsagnet x = x
er meget tvetydigt, da både metodeparameteren og strukturens felt har navnet x
. Ifølge kompilatoren tildeler metodeparameteren x = x
værdien x
til sig selv igen i udsagnet x
, hvilket logisk set er en tom handling og derfor ikke gør noget.
For at løse dette bruger du nøgleordet this
. Nøgleordet this
fortæller kompilatoren, at du henviser til feltet i strukturen.
Syntaksen er this.fieldName
. Så den rettede kode vil se sådan ud:
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 ved compileren, at i sætningen x = x
, er x
på venstre side et struct-felt, mens x
på højre side er en metodeparameter, og derfor bliver feltet opdateret korrekt denne gang.
Du bruger nøgleordet this
for at løse enhver tvetydighed i koden. Det er generelt god praksis altid at bruge nøgleordet this
, når felter tilgås i struct-metoder.
Tak for dine kommentarer!