C#'ta boxing ve unboxing nedir ve bu süreçlerden nasıl kaçınılabilir?
sobes.tech yapay zeka
AI'dan gelen yanıt
Boxlama (boxing), değer türünün object veya object'ten türeyen başka herhangi bir referans türüne dönüşümüdür. Bu işlemde, değer yeni bir bellek alanına yerleştirilir ve yönetilen yığında saklanır.
Unboxing (ayrıştırma), object türünden bir referansın açıkça değer türüne dönüştürülmesidir. Öncelikle, nesnenin istenen değer türünün örneği olup olmadığı kontrol edilir ve ardından veri alanı yoldan kopyalanır.
Örnekler:
// Boxing
int değerTürü = 10;
object referansTürü = değerTürü; // değerTürü boxing yapılır
// Unboxing
int ayrıştırılmışDeğer = (int)referansTürü; // referansTürü unboxing yapılır
Boxlama ve unboxing işlemlerinden kaçınmak için generikler kullanılabilir. Generik koleksiyonlar ve metodlar doğrudan değer türleriyle çalışır, object'e dönüştürmeye gerek kalmaz. Bu, performansı artırır ve tür güvenliğini sağlar.
Generiklerle örnek:
// ArrayList yerine List<T> kullanımı
using System.Collections.Generic;
List<int> jenerikListe = new List<int>();
jenerikListe.Add(10); // Box yapılmaz
int değer = jenerikListe[0]; // Unbox yapılmaz
Generiklerin kullanımı, heap'te bellek ayırma ve veri kopyalama maliyetlerini önler ve çalışma zamanında tür hatalarını engeller.