Hvorfor lave instansvariabel og 'lokal'variabel med samme navn ?

I dette forum kan du stille og svare på spørgsmål om C# programmering. Alle med en interesse for C# er velkommen!
Besvar
Bauder
Begynder
Indlæg: 1
Tilmeldt: 3. jan 2018, 10:53

Hvorfor lave instansvariabel og 'lokal'variabel med samme navn ?

Indlæg af Bauder » 7. jan 2018, 15:52

Hejsa

Mange tak for de gode og instruktive tutorials du har lavet om c#. Du kommer godt omkring emnet på en let forståelig måde.

Men foreløbig er der en ting der forvirrer mig: I tutorial 17 om instansvariabler vælger du at lave både en instansvariabel og en lokal variabel med navn 'gas'. Herefter bruger du this.gas = gas for at tildele den lokale variabel den samme værdi som i instansvariablen. Hvorfor ikke kalde lokalvariablen 'gas2' og så sige gas2 = gas ?

Du siger i tutorialen at det er normalt at bruge samme navn, men hvorfor ? Jeg synes det bidrager mere til forvirring, når man er ved at lære sproget

Hilsen Bauder

jepperask
Geni
Geni
Indlæg: 378
Tilmeldt: 4. nov 2012, 17:57

Re: Hvorfor lave instansvariabel og 'lokal'variabel med samme navn ?

Indlæg af jepperask » 11. jan 2018, 18:25

Jeg kan godt følge dig, men jeg tror faktisk det er et forsøg på at give dig lidt ekstra info, nemlig at du altid kan referere til 'den klasse du er inde i' med keywordet this.

Der er massere af standarder for navngivning af variable, og jeg mener at det er mest anvendt at skrive lokale-variable med en underscore:

Kode: Vælg alt

private double _gas;
Så kan du, som du selv nævner, kalde din parameter "gas" og skrive _gas = gas; eller this._gas = gas.

Det er rigtig godt at lære getters/setters og når du føler du har styr på det, kan du gå over til det der kaldes "Properties" i C# (jeg ved ikke om kurset kommer ind på dem).

cristian
Moderator
Moderator
Indlæg: 882
Tilmeldt: 26. sep 2011, 21:31
Kontakt:

Re: Hvorfor lave instansvariabel og 'lokal'variabel med samme navn ?

Indlæg af cristian » 11. jan 2018, 18:54

I tutorial 17 om instansvariabler vælger du at lave både en instansvariabel og en lokal variabel med navn 'gas'. Herefter bruger du this.gas = gas for at tildele den lokale variabel den samme værdi som i instansvariablen. Hvorfor ikke kalde lokalvariablen 'gas2' og så sige gas2 = gas?
Så vidt jeg ved er der ikke noget teknisk at vinde ved denne fremgangsmåde, din kode eksekveres ikke hurtigere eller noget i den dur.
Når du f.eks skriver

Kode: Vælg alt

//lokal variable
private int a = 0;

//konstruktør
public test (int a) {
   this.a = a;
}
Så kan vi genbruge ens variable navn flere gange, da compileren kan skelne imellem dem fordi de tilhører forskellige kode blokke.
Så "a" inde i vores konstruktør, er ikke den samme som "a" udenfor vores konstruktør.
De referer ikke til hinanden, men er to selvstændige enheder

For at besvare følgende spørgsmål
Hvorfor ikke kalde lokalvariablen 'gas2' og så sige gas2 = gas?
Vill jeg give følgende svar
Man gør det på denne måde fordi instans variablen "a" og konstruktørens variable "a" bliver tildelt den samme værdi,
og derved giver det mere mening at kalde variablerne det samme end at skelne imellem dem. Da f.eks "gas" og "gas1",
ligger op til at de skal indeholde forskellige værdier.

Besvar