Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.

Hasonló előadás


Az előadások a következő témára: "1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz."— Előadás másolata:

1 1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz

2 2 Itt nem készül másolat a hallgatóról, az ArrayList csak a referenciát (4 byte) tárolja el magában… ArrayList t = new ArrayList(); Hallgato p = new Hallgato(); p.Nev = ”Pistike”; t.Add( p ); ArrayList t = new ArrayList(); Hallgato p = new Hallgato(); p.Nev = ”Pistike”; t.Add( p ); p.Nev = ”Lajoska”; Hallgato m = (Hallgato)t[0]; Console.WriteLine( m.Nev ); // Lajoska p.Nev = ”Lajoska”; Hallgato m = (Hallgato)t[0]; Console.WriteLine( m.Nev ); // Lajoska

3 3 Az Object típus referencia-elvű… class ArrayList { public void Add( Object x ) {... } class ArrayList { public void Add( Object x ) {... } int a = 11; t.Add( a ); // ??? int a = 11; t.Add( a ); // ??? Az ‘int’ viszont value type … int a = 11; Object o = a; int a = 11; Object o = a; Mivel minden típus (az ‘int’ is) kompatibilis az Object- el, ezért o=a értékadás típushelyes. De mi történik?

4 4 Amikor egy value type értéket akarunk berakni egy referencia-típusú változóba, akkor egy speciális eljárás történik: BOXING. A value type értékről egy másolat készül valahol a memóriában, és a referencia változóba bekerül ennek a címe. int a = 11; Object o = a; int a = 11; Object o = a; cím 11 o o a a

5 5 Fordított irányba történő értékadás során visszamáso- lódik az érték a value type változóba: UNBOXING. int a = 11; Object o = a; // másolat, boxing a = 23;... Int b = (int)o; // unboxing int a = 11; Object o = a; // másolat, boxing a = 23;... Int b = (int)o; // unboxing A ‘b’ értéke az eredeti 11 lesz!

6 6 ArrayList t = new ArrayList(); int a = 11; t.Add( a ); a = 25;... int b = (int)t[0]; // 11 lesz ! ArrayList t = new ArrayList(); int a = 11; t.Add( a ); a = 25;... int b = (int)t[0]; // 11 lesz ! Az ArrayList nem túl takarékos sok int érték tárolására, mert minden int-hez (4 byte) készül egy referencia is (+4 byte)

7 7 A Boxing és Unboxing műveletek automatikusan (implicit) módon történnek. Csak érdekességképpen jegyeztük meg, hogy léteznek...


Letölteni ppt "1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz."

Hasonló előadás


Google Hirdetések