C# Boxing ve Unboxing Nedir?

Boxing, bir değer tipini(value type) object tipine(object type) dolaylı olarak dönüştürme işlemidir.

int i = 123;
object o = i; //dolayli olarak donusturme islemi

Yukarıdaki örnekte i değişkeni değer tipi(value type) olarak gösterilir.

CLR, değer tipini(int i = 123;) kutular(box). 123 değerini System.Object içine paketler(wrap). Sonra yönetilmiş yığında(managed heap) depolar.

Yığında(stack) bulunan object o, yönetilmiş yığında(managed heap) bulunan değer tipinin(value type) değerini referans verir. Bu değer, i değişkenine ayrılmış değerin kopyasıdır.

boxing nedir c#
boxing nedir c#

int i = 123;
object o = (object)i; // dogrudan donusturme islemi

Yukarıda görülen örnekteki gibi de kutulanabilir(boxing). Ancak önerilmez.

Unboxing, nesneden(object) değer tipine(value type) doğrudan çevirme işlemidir.

int i = 123;      // a value type
object o = i;     // boxing
int j = (int)o;   // unboxing
unboxing nedir c#
unboxing nedir c#

Boxing işleminden sonra, o object kutudan çıkarılır(unboxing) ve integer j değişkenine atanır.(j değişkenine yönetilmiş yığında depolanan(managed heap) değer kopyalanır.)

Eğer int j = (int)o; yerine int j = (short)o; ifadesi olursa, InvalidCastException hatası alınır. Çünkü boxing işleminde kullanılan veri tipi değildir.

Referans : https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/types/boxing-and-unboxing

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir