Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Oppiskele Kenttien Oikea Käsittely Rakenteiden Metodeissa | Rakenteet ja Enumeraattorit
C# Perusteiden Jälkeen

bookKenttien Oikea Käsittely Rakenteiden Metodeissa

Tähän asti olet luonut metodeja, välittänyt niihin tietoa ja käyttänyt niitä ongelmitta, mutta harkitse esimerkkiä, jossa metodin parametrin nimi on sama kuin rakenteen kentän nimi:

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

Kääntäjä ei näytä tässä tapauksessa virhettä, mutta ohjelma on loogisesti virheellinen, sillä ohjelman tuloste on (0, 0) vaikka käytit setValue(5, 7).

Tämä johtuu siitä, että lauseke x = x on hyvin epäselvä, koska sekä metodin parametri että rakenteen kenttä ovat nimeltään x. Kääntäjän näkökulmasta lauseessa x = x metodin parametri x asettaa arvon x itselleen uudelleen, mikä on loogisesti tyhjä lauseke eikä tee mitään.

Tämän korjaamiseksi käytetään avainsanaa this. Avainsana this kertoo kääntäjälle, että viitataan rakenteen kenttään.

Syntaksi on this.fieldName. Korjattu koodi näyttää tältä:

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

Nyt kääntäjä tietää, että lauseessa x = x vasemman puolen x viittaa rakenteen kenttään ja oikean puolen x on metodin parametri, joten kenttä päivittyy onnistuneesti tällä kertaa.

this-avainsanaa käytetään ratkaisemaan koodin mahdolliset epäselvyydet. On yleisesti hyvä käytäntö käyttää aina this-avainsanaa, kun viitataan kenttiin rakenteen metodeissa.

question mark

Mitä avainsanaa käytetään poistamaan epäselvyys, kun viitataan kenttiin luokan metodeissa?

Select the correct answer

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 2. Luku 6

Kysy tekoälyä

expand

Kysy tekoälyä

ChatGPT

Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme

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

bookKenttien Oikea Käsittely Rakenteiden Metodeissa

Pyyhkäise näyttääksesi valikon

Tähän asti olet luonut metodeja, välittänyt niihin tietoa ja käyttänyt niitä ongelmitta, mutta harkitse esimerkkiä, jossa metodin parametrin nimi on sama kuin rakenteen kentän nimi:

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

Kääntäjä ei näytä tässä tapauksessa virhettä, mutta ohjelma on loogisesti virheellinen, sillä ohjelman tuloste on (0, 0) vaikka käytit setValue(5, 7).

Tämä johtuu siitä, että lauseke x = x on hyvin epäselvä, koska sekä metodin parametri että rakenteen kenttä ovat nimeltään x. Kääntäjän näkökulmasta lauseessa x = x metodin parametri x asettaa arvon x itselleen uudelleen, mikä on loogisesti tyhjä lauseke eikä tee mitään.

Tämän korjaamiseksi käytetään avainsanaa this. Avainsana this kertoo kääntäjälle, että viitataan rakenteen kenttään.

Syntaksi on this.fieldName. Korjattu koodi näyttää tältä:

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

Nyt kääntäjä tietää, että lauseessa x = x vasemman puolen x viittaa rakenteen kenttään ja oikean puolen x on metodin parametri, joten kenttä päivittyy onnistuneesti tällä kertaa.

this-avainsanaa käytetään ratkaisemaan koodin mahdolliset epäselvyydet. On yleisesti hyvä käytäntö käyttää aina this-avainsanaa, kun viitataan kenttiin rakenteen metodeissa.

question mark

Mitä avainsanaa käytetään poistamaan epäselvyys, kun viitataan kenttiin luokan metodeissa?

Select the correct answer

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 2. Luku 6
some-alt