Boxing: değer türünden bir değişkeni referans türünden bir nesneye aktarma işlemidir.Unboxing : bunun tersidir. Burda değişkenlerin hangi bellekte tutulduğu asıl önemli olan noktadır. referans tipleri (Reference type) ve değertipleri (value type) boxing unboxing in temelinş oluşturur.
Value type’lar stack (Yığın) Reference type ise Heap(öbek) de tutulmaktadır. Reference tipleri Şunlardır : Delegate, İnterface, Strings,object,class . Value tpleri ise bildiğimiz ; int , float , double,char…vb tiplerdir.
Boxing :
using System; namespace İbo { } } |
ekran cıktısı:
Değer tipli değişken = 120 Değer tipli değişken = 300 referans tipli değişken = 120 |
Çünkü object obj Satırında stackta tutulan ibo Değişkeninin Bir kopyası heap de oluşturuldu ve bunun referansı obj değişkeninde tutuldu. Biz ibo değişkeninin değerini değiştirdiğimizde stacktaki değer değişti fakat heapde oluşturduğumuz değer değişmedi.Böylece Boxing işlemimizi yapmış olduk.
Burda boxing de Kopyalam kısmı otomatik olarak yapıldı.
Unboxing :
using System; namespace ibrahiminclasi obj=ibo; Console.WriteLine(ibo.ToString()); double yenibo; } |
burda önce stackta ibo adlı değer tutulur sonra bu değerin heap de bir kopyası oluşturulur(boxing). Ve arkasından stack’ta bulunan değer tipli değişkenin değeri değiştirdi. fakat referans tipli değişken heapte etkilenmemiştir. Burda kutulama işlemi bitiyor . arkasından kutudan çıkarma işlemi başlıyor. ve Heap te bulunan obj nesnesinin (referans tipli) value tipli değişkene yenibo ya aktarılıyor. Yani boxing işlemi ile kutulanmış bir veri kümesi, öbekten alınıp tekrar yığındaki bir alana konulmuş, dolayısıyla kutudan çıkartılmıştır.