Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lära Korrekt Åtkomst av Fält i Strukturmetoder | Strukturer och Enumeratorer
C# Bortom Grunderna

bookKorrekt Å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

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

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

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 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.

question mark

Vilket nyckelord används för att eliminera oklarheter vid referens till fält i klassmetoder?

Select the correct answer

Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 2. Kapitel 6

Fråga AI

expand

Fråga AI

ChatGPT

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

bookKorrekt Å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

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

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

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 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.

question mark

Vilket nyckelord används för att eliminera oklarheter vid referens till fält i klassmetoder?

Select the correct answer

Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 2. Kapitel 6
some-alt