Kutulama Dönüştürmesi (Boxing Conversion)

Anımsanacağı gibi tüm yapılar System.ValueType türünden türetilmiş durumdadır. System.ValueType sınıfında System.Object türünden türetilmiştir. O halde, biz herhangi bir yapı değişkenini System.ValueType yada System.Object referanslarına atayabilir miyiz? İşte bir yapının System.ValueType yada System.Object referanslarına atanmasına, kutulama dönüştürmesi ( Boxing Conversion ) denir.

Referanslar stackdeki nesnenin adresini tutamazlar. Halbuki yapı değişkenleri stackdedir. İşte ne zaman bir yapı değişkeni System.ValueType yada System.Object türlerine atanacak olsa, o yapı değişkeninin heapde bir kopyası çıkartılır ve atanan referans heapdeki bu kopyayı gösteriyor duruma gelir.


Kutulama dönüştürmesinden sonra stackdeki yapı değişkeni ile heapdeki kopya tamamen farklı iki nesnedir. Birinde yapılan değişiklik diğerini etkilemez.

Stackdeki değişken programın akışı blokdan çıkarken otomatik olarak, heapdeki nesne ise çöp toplayıcı tarafından yok edilir.
Int, Long, Double gibi temel türlerde birer yapı belirttiğine göre, onlar da System.ValueType yada System.Object referanslarına atanabilir.

Bu durumda stackdeki int değişkenin heapde kopyası çıkartılır o artık bu kopyayı gösterir duruma gelir.

Kutulama dönüştürmesi aynı biçimde enum türleri için de uygulanmaktadır. Görüldüğü gibi her şey Object referansına atanabilir.
Kutuyu Açma Dönüştürmesi (Unboxing Conversion)

Örneğin:

Stackde oluşturulan geçici değişken kullanıldığı ifade bittiğinde yok edilir. Şüphesiz kutuyu açma dönüştürmesi yapıldığında heapdeki kopya yaşamaya devam eder.

C# da küçük temel türün büyük temel türe atanması, ayrı bir kuraldır ve bir türetme ilişkisi yüzünden gerçekleşmemektedir. Int yapısı Long yapısına doğrudan atanabilir fakat bu iki yapı birbirinden bağımsız iki ayrı yapıdır. Bu durumda örneğin dinamik türü int olan bir Object referansını biz tür dönüştürme operatörüyle aşağıya doğru long türüne dönüştüremeyiz.

Örneğin:

Fakat

Kutulama dönüştürmesi sabit atamalarında da gerçekleşir.

Örneğin:

Burada 100 int türündendir. Böylece kutulama dönüştürmesi sırasında heapde int türünden bir kopyası çıkarılacaktır. “o” referansı heapdeki int türden nesneyi gösterir.

Örneğin:

Örneğin:

Kaynak:Kaan Aslan Hocanın Dersinde Tuttuğum Ders Notlarıdır.

Leave a Reply

Site Footer