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

Yazar: Laura McKinney
Yaratılış Tarihi: 2 Nisan 2021
Güncelleme Tarihi: 5 Mayıs Ayı 2024
Anonim
Boks ve Bokseden Çıkarma Arasındaki Fark C # - Teknoloji
Boks ve Bokseden Çıkarma Arasındaki Fark C # - Teknoloji

İçerik


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ünü ifade edebilir. 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 ve Bokseden diğer farkları inceleyelim.

  1. Karşılaştırma Tablosu
  2. Tanım
  3. Anahtar Farklılıklar
  4. Sonuç

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.Yığın bellekte depolanan nesneler değeri, yığında depolanan değer türüne kopyalanır.
DönüştürmekÖ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 örnekle boks yapalı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 istif üzerinde 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 nesne 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 tipinin değeri, yığında depolanan değer tipine 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 depolanan değer, obje ile aynı türe atıfta bulunarak elde edilir, yani tamsayı tipine "j" denir.

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.

  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 yapmak gizli bir dönüşümdür, kutuyu açmak 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 tip güvenliğinden yoksundurlar ve çalışma sürelerini yükseltirler. Programda çok fazla boks ve unbox kullanımından kaçınılması tavsiye edilir.