Ce sunt boxing și unboxing?
string s = "test";object obj = s; // boxing, nu trebuie folosit cast-ul
string str = (string)obj; // unboxing, trebuie folosit cast-ul
De ce se folosesc?
object este un tip-referință, string este un tip-valoare. În unele locuri e nevoie de folosirea unui tip-referință și nu a unui tip-valoare (când trebuie să apelezi o metodă care folosește metoda ToString a unui parametru de tip object sau o subclasă a object). Atunci e posibilă introducerea unei variabile de tip-valoare într-o variabilă de tip-referință. Și variabilele de tipuri-referință, și cele de tipuri-valoare se pot inițializa cu operatorul new când tipul respectiv are un constructor accesibil.Ce este un tip-valoare?
int x = 5;int y = 5;
Console.WriteLine(x == y); // Adevărat (True) pentru că valoarea lui y este o copie a valorii lui x, și se testează doar egalitatea valorilor, nu a adreselor de memorie ale variabilelor.
Tipurile-valoare se creează cu cuv. cheie struct. Documentație oficială în acest link [EN].
Ce este un tip-referință?
object a = 5;object b = 5;
Console.WriteLine(a == b); // Fals (False) pentru că a și b sunt indicatori ai unei singure valori, 5, dar a face trimitere la a, și b face trimitere la b. Se compară adresele din memorie ale variabilelor.
Tipurile-referință se creează cu cuv. cheie class. Documentație oficială în acest link [EN].
Exemplu
using System;using System.Windows.Forms;
namespace cs_boxing_unboxing
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
string s = "test";
object obj = s; // boxing, nu trebuie folosit cast-ul
string str = (string)obj; // unboxing, trebuie folosit cast-ul
Console.WriteLine(str);
int x = 5;
int y = 5;
Console.WriteLine(x == y); // Adevărat (True) pentru că valoarea lui y este o copie a valorii lui x, și se testează doar egalitatea valorilor, nu a adreselor de memorie ale variabilelor.
object a = 5;
object b = 5;
Console.WriteLine(a == b); // Fals (False) pentru că a și b sunt indicatori ai unei singure valori, 5, dar a face trimitere la a, și b face trimitere la b. Se compară adresele din memorie ale variabilelor.
}
}
}
Capturi de ecran
La rularea programului, se afișează:
Niciun comentariu:
Trimiteți un comentariu