1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz
2 Egy példányszintű metódus belsejében a példány mezőinek elérése automatikus, egyszerűen a mező nevének beírásával történik. class TVadAllat { private int Eletkor = 0; public void Oregszik() { Eletkor++;... } class TVadAllat { private int Eletkor = 0; public void Oregszik() { Eletkor++;... }
3 Időnként szükséges, hogy a példányszintű metódus belsejében szükség van magára az aktuális példányra hivatkozni. Ezt a ‘this’ foglalt szóval tehetjük meg: class TVadAllat { public void Megeszik(TNovenyevo aldozat) {... } class TVadAllat { public void Megeszik(TNovenyevo aldozat) {... } class TNovenyevo { public void Megtamad(TVadallat gyilkos) { if (tulFaradt) gyilkos.Megeszik( this );... } class TNovenyevo { public void Megtamad(TVadallat gyilkos) { if (tulFaradt) gyilkos.Megeszik( this );... }
4 Valójában a ‘this’ egy láthatatlan plusz paraméter, amelyet a fordítóprogram automatikusan kezel: TNovenyevo v = new TNovenyevo(); v.Megtamad( tigris ); TNovenyevo v = new TNovenyevo(); v.Megtamad( tigris ); public void Megtamad(TVadallat gyilkos) {...} public void Megtamad(TVadallat gyilkos, TNovenyevo this) TNovenyevo v = new TNovenyevo(); TNovenyevo :: Megtamad( tigris,v ); TNovenyevo v = new TNovenyevo(); TNovenyevo :: Megtamad( tigris,v ); Ezek a példák csak a megértést segítik. Ezt így ne lehet használni C#-ban…
5 A this szót azonban más formában is hasznosíthatjuk: public void Oregszik(int evekSzama) { this.Eletkor += evekSzama; } public void Oregszik(int evekSzama) { this.Eletkor += evekSzama; } class TSajat { private int x=0; public void Eltol(int x) { this.x += x; } class TSajat { private int x=0; public void Eltol(int x) { this.x += x; }
6 A this szót főleg constructor-ban használhatjuk így: class TSajat { private int x=0; public TSajat(int x) { this.x += x; } class TSajat { private int x=0; public TSajat(int x) { this.x += x; } A this ezen használata hangsúlyozza, hogy az azonosító példánymező. Ez ‘kötelező’, ha félreérthető a helyzet, mint a fenti kódban is. Itt a ‘this’ nélküli értékadás értelmetlen, mert a ‘this’ nélküli ‘x’ a paraméterváltozót jelenti!
7 A this szócskát osztály szintű metódusban (static) nem használható fel, mert a ‘this’ a példányt azonosítja, de az osztályszintű metódus hívásához nem kell (és nincs is) példány! A ‘this’ foglalt szó, másra felhasználni nem lehet!