Tavsiye, 2022

Editörün Seçimi

Boks ve Bokseden Çıkarma Arasındaki Fark C #

C # 'da, tüm değer türleri sınıf nesnesinden türetilir. Bu nedenle, type nesnesinin bir başvuru değişkeni, başka herhangi bir değer türüne başvurabilir. C #, değer türünü referans türüne bağlayan Boks ve Kutusuzlaştır'a iki yöntem sunar. Boxing ve Unboxing arasındaki temel fark, Boxing'in değer türünün bir nesne tipine dönüştürülmesidir, diğer yandan Unboxing terimi, nesne tipinin değer türüne dönüştürülmesini ifade eder. Boks ile Boks Kutusuzluk arasındaki diğer farklılıkları inceleyelim.

Karşılaştırma Tablosu

Karşılaştırma için temelBoksUnboxing
TemelNesne tipi, değer tipini ifade eder.kutulu nesneden değer alma işlemi.
DepolamaYığında depolanan değer, yığın belleğinde depolanan nesneye kopyalanır.Öbek hafızasında saklanan nesnenin değeri, yığında depolanan değer türüne kopyalanır.
dönüştürmeÖrtük dönüşüm.Açık dönüşüm.
Örnekint n = 24;
ob ob = n;
int m = (int) ob;

Boks tanımı

Boks, bir değer türünü bir nesne türüne dönüştürme işlemidir. Burada, değer türü yığında depolanır ve nesne türü yığın bellekte depolanır. Değer türünün nesne türüne dönüştürülmesi, örtük bir dönüşümdür. Doğrudan bir nesneye değer atayabilirsiniz ve C # dinlenme dönüşümünü gerçekleştirir. Bir örnek ile boks anlayalım.

 int i = 24; ob nesnesi = i; // n tamsayı tipini ob nesne tipine yazın. veya ob1 nesnesi = 21; // burada ob1 nesne tipi de tamsayı tipine işaret eder. 

Yukarıdaki kodda, 24 değerini içeren i tamsayı tipi yığında depolanır ve ob nesne tipine kopyalanır. Bir nesne tipi şimdi bir tamsayı değerine işaret ediyor. Şimdi, “int i” de 24 değerini içerir ve “ob obje türü” de 24 değerini içerir, ancak her iki değer de birbirinden bağımsızdır, yani, eğer i'nin değerini değiştirirseniz, bu değişkeni yansıtmaz. ob değeri

Boks ekstra zaman ile birlikte ekstra hafıza tüketir. Bunun nedeni, değer türüne atıfta bulunacak yeni bir nesnenin öbek üzerindeki bellek alanını ayırması gerektiğidir. Daha sonra, yığında depolanan değer türünün değeri, yığın bellek konumunda obje tipine aktarılacaktır.

Unboxing'un tanımı

Boksenin tersi Kutunun Kutusudur. Kutudan çıkarma, nesne türünün değer türüne dönüştürülmesidir. Unboxing uygulamasında öbek üzerinde depolanan kutulu nesne türü değeri, yığında depolanan değer türüne aktarılır. Boksenin aksine, Açma işlemi açıkça yapılmalıdır. Nesne türü açıkça değer türüne dönüştürülür ve değer türü, nesne türünün başvurduğu değerle aynı olmalıdır. Unboxing kavramını bir örnekle anlayalım.

 int i = 24; ob nesnesi = i; // n tamsayı tipini ob nesne tipine yazın. int j = (int) ob; // ob nesne tipinde saklanan tamsayı değerini y tamsayı tipine getirin. 

Ob nesnesinde saklanan değer, obje ile aynı türe atıfta bulunarak elde edilmiştir, yani “j” tamsayı tipine atıfta bulunmaktadır.

Unboxing ayrıca daha fazla hafıza ve daha fazla zaman harcar. Bir nesne tipinin kutusunun açılması gerektiğinden, öbek üzerinde depolanan nesne tipinin değerinin, yığında depolanan yeni değer tipine aktarılması gerekir. Değeri alınmış olan nesne tipi artık çöp toplama için uygun olacaktır.

Boxing ve Unboxing Arasındaki Temel Farklılıklar

  1. Boksta, bir değer türü olarak adlandırılacak bir nesne yapılır. Öte yandan, değeri kutulu nesneden geri alma işlemine kutulama denir.
  2. Bir yığında depolanan bir değer türü, yığın belleğinde depolanan nesneye kopyalanır. Öte yandan, kutunun açılması sırasında, yığın belleğinde depolanan bir nesne yığın bellekte depolanan bir değer türüne kopyalanır.
  3. Boks, örtük bir dönüşümdür, kutunun kaldırılması ise açık bir dönüşümdür.

Sonuç:

Hem boks hem de unboxing daha fazla zaman ve hafıza tüketiyor ve hesaplamalı olarak pahalı. Aynı zamanda güvenlik türünden de yoksundurlar ve çalışma sürelerini yükseltirler. Programda çok fazla boks ve unbox kullanımından kaçınılması tavsiye edilir.

Top