Korrekt Åtkomst av Fält i Strukturmetoder
Hittills har du skapat metoder, skickat in data till dem och använt dem utan problem, men överväg ett exempel där namnet på metodparametern krockar med namnet på ett fält 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(); } }
Kompilatorn visar inget fel i detta fall, men programmet är logiskt felaktigt eftersom programmets utdata visar (0, 0)
även om du använde setValue(5, 7)
.
Detta beror på att satsen x = x
är mycket tvetydig eftersom både metodparametern och strukturens fält har namnet x
. Enligt kompilatorn innebär satsen x = x
att metodparametern x
tilldelar värdet x
till sig själv igen, vilket logiskt sett är en tom sats och därför inte gör någonting.
För att åtgärda detta använder du nyckelordet this
. Nyckelordet this
talar om för kompilatorn att du syftar på fältet i strukturen.
Syntaxen är this.fieldName
. Den korrigerade koden ser då ut så här:
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 vet kompilatorn att i satsen x = x
är x
på vänster sida ett strukturfält medan x
på höger sida är en metodparameter, och därför uppdateras fältet korrekt denna gång.
Du använder nyckelordet this
för att lösa eventuella oklarheter i koden. Det är generellt en god praxis att alltid använda nyckelordet this
när du refererar till fält i strukturmetoder.
Tack för dina kommentarer!
Fråga AI
Fråga AI
Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal
Awesome!
Completion rate improved to 2.04
Korrekt Åtkomst av Fält i Strukturmetoder
Svep för att visa menyn
Hittills har du skapat metoder, skickat in data till dem och använt dem utan problem, men överväg ett exempel där namnet på metodparametern krockar med namnet på ett fält 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(); } }
Kompilatorn visar inget fel i detta fall, men programmet är logiskt felaktigt eftersom programmets utdata visar (0, 0)
även om du använde setValue(5, 7)
.
Detta beror på att satsen x = x
är mycket tvetydig eftersom både metodparametern och strukturens fält har namnet x
. Enligt kompilatorn innebär satsen x = x
att metodparametern x
tilldelar värdet x
till sig själv igen, vilket logiskt sett är en tom sats och därför inte gör någonting.
För att åtgärda detta använder du nyckelordet this
. Nyckelordet this
talar om för kompilatorn att du syftar på fältet i strukturen.
Syntaxen är this.fieldName
. Den korrigerade koden ser då ut så här:
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 vet kompilatorn att i satsen x = x
är x
på vänster sida ett strukturfält medan x
på höger sida är en metodparameter, och därför uppdateras fältet korrekt denna gång.
Du använder nyckelordet this
för att lösa eventuella oklarheter i koden. Det är generellt en god praxis att alltid använda nyckelordet this
när du refererar till fält i strukturmetoder.
Tack för dina kommentarer!