Kenttien 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
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(); } }
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
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(); } }
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.
Kiitos palautteestasi!
Kysy tekoälyä
Kysy tekoälyä
Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme
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
Kenttien 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
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(); } }
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
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(); } }
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.
Kiitos palautteestasi!