Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Korrekt Tilgang til Felt i Metode for Struct | Strukturer og Enumeratorer
C# Utover Det Grunnleggende

bookKorrekt 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

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

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

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.

question mark

Hvilket nøkkelord brukes for å eliminere tvetydighet når man refererer til felt inne i klassemåter?

Select the correct answer

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 2. Kapittel 6

Spør AI

expand

Spør AI

ChatGPT

Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår

Suggested prompts:

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

bookKorrekt 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

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

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

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.

question mark

Hvilket nøkkelord brukes for å eliminere tvetydighet når man refererer til felt inne i klassemåter?

Select the correct answer

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 2. Kapittel 6
some-alt