Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Korrekt Adgang til Felter i Struct-Methods | Strukturer og Enumeratorer
C# Ud Over Det Grundlæggende

bookKorrekt 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

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

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

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

question mark

Hvilket nøgleord bruges til at eliminere tvetydighed ved reference til felter i klassemetoder?

Select the correct answer

Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 2. Kapitel 6

Spørg AI

expand

Spørg AI

ChatGPT

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

bookKorrekt 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

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

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

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

question mark

Hvilket nøgleord bruges til at eliminere tvetydighed ved reference til felter i klassemetoder?

Select the correct answer

Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 2. Kapitel 6
some-alt