Tipuri de valori și tipuri de referințe

Spre deosebire de câteva limbi de programare, C # are două tipuri de tipuri de date: pentru valoare și pentru referință. Dacă performanța unei aplicații este semnificativă sau există interes pentru modul în care C # gestionează datele și memoria, este important să cunoaștem diferențele dintre aceste tipuri.







Tipul de valoare stochează conținutul său în memoria alocată pe stivă. De exemplu, valoarea 42 în acest caz este stocată într-o zonă de memorie numită stivă.

Atunci când variabila x iese din domeniul de acțiune din cauza finalizării executării metodei în care a fost declarată, valoarea este eliminată din stivă.

Utilizarea unei stive este eficientă, dar durata de viață limitată a tipurilor de valori le face mai puțin potrivite pentru partajarea datelor între diferite clase.

În schimb, un tip de referință, cum ar fi o instanță a unei clase sau a unei matrice, este plasat într-o altă zonă a memoriei, numită heap. În exemplul următor, spațiul necesar pentru o serie de zece întregi este plasat pe heap.







int [] numere = int int [10];

Boxing și Unboxing

int i = 67; // i este un tip de valoare

obiect o = i; // i este în cutie

System.Console.WriteLine (i.ToString ()); // i este în cutie

Veți întâlni dezarhivarea când folosiți clase concepute pentru a fi utilizate cu obiecte: de exemplu, utilizând un ArrayList pentru a stoca numere întregi. Când stocați un număr întreg în ArrayList, este în cutie. Când extrageți un număr întreg, acesta trebuie să fie fără cutie.

noul System.Collections.ArrayList (); // este un tip de referință

int n = 67; // n este un tip de valoare

list.Add (n); // n este în cutie

n = (int) listă [0]; // lista [0] este fără cutie

Ambalarea și despachetarea

Un pachet este un proces de conversie a unui tip de valoare la un tip de referință. Pentru a pachete o variabilă, trebuie să creați o variabilă de referință care indică o copie nouă în heap. Variabila de referință este un obiect, prin urmare, pot fi utilizate toate metodele moștenite de fiecare obiect, de exemplu, ToString (). Următorul cod arată cum se întâmplă acest lucru.

int i = 67; // i este un tip de valoare

obiect o = i; // i este în cutie

System.Console.WriteLine (i.ToString ()); // i este în cutie

Despachetarea este folosită pentru clasele destinate lucrului cu obiecte: de exemplu, folosind ArrayList pentru a stoca numere întregi. Ambalarea este utilizată pentru stocarea numerelor întregi în ArrayList. Când se extrage un număr întreg, trebuie să se despacheteze.

noul System.Collections.ArrayList (); // este un tip de referință

int n = 67; // n este un tip de valoare

list.Add (n); // n este în cutie

n = (int) listă [0]; // lista [0] este fără cutie







Articole similare

Trimiteți-le prietenilor: