2012-07-16 12 views
9

Veri türlerini ilkel veri türleri arasında dönüştürdüğümüzde veri türü olarak adlandırılır.Boks ve kutuklama da yayınlanıyor mu?

Ancak, ValueType ve ReferenceType arasında geçiş yaptığımızda, onu boks ve kutuklama olarak adlandırıyoruz.

Boks ve kutucuklama da döküm olarak adlandırılabilir mi?

cevap

8

Boks, aslında bir nesne gövdesindeki bir değer türünü yalnızca sarmaktır. Aslında, (int)3.14'un yaptığı gibi bir tür dönüşümü içermez. Her ikisi de cast operatörünü kullanmasına rağmen.

+0

hızlı yanıt için teşekkür ederiz. Başka cevap bekliyorum! – LaysomeSmith

0

Boks için bir tür dönüştürmek için olduğu gibi değer retriveing ​​tipi nesneye bir değer türü dönüştürme ve unboxing süreci olduğunu Daha sonra kutudan çıkartılabilen anonim bir nesneye yazın.

int x = 567; 
object y = x; //boxing 

int z = (int) y; //z will be 123 

int x = 567; 
object y = (object)x; //explicit boxing (not necessary) 

int z = (int) y; //z will be 123 

Boks/Unboxing boks biz sadece bir değişkene etrafında sarıcı koyarak ederken olarak tip döküm ile karıştırılmamalıdır. Tip dökümünü yaparak aslında değişkenin veya nesnenin türünü değiştirirsiniz.

Double x = 3.14444; 
Integer y = (Integer)x; //(type cast or static cast in c++) changing the type and loosing the original value too in this case. 


int x = 567; 
object y = (object)x; //explicit boxing (not necessary) 

float z = (float) y; //another example of type casting while unboxing 
+0

Soru, kutu dökümü ve kutudan çıkma olarak kutudan çağırabilir miyiz? – LaysomeSmith

+0

@LaysomeSmith biraz daha fazla ayrıntı ekledi – Mayank

0

Döküm: (başka bir bir tip örneği dönüştürme hakkında temelde)

int a = (int) 3.14 // from the example above does casting with loosing precision. 
double b = a; // casting again (we may write (double) a - gives the same result). 

Boks: (yığına kopyalama değeri türü bir işlem)

object c = new MyStruct(); // MyStruct = struct. 
object d = 1; 
object e = (int) 3.14; // here we have actually casting and then boxing. 

Unboxing (kopyalama kutulu değer türü yığına geri):

Button f = (MyStruct) c; 
int g = (int) d; // it still unboxing however it looks exactly like the line #1 above. 

Umarım yardımcı olur.

0

NULL olmayan her bir değer türü, aynı üyelere sahip ilişkili bir yığın nesne tipine sahiptir. Bir değer türü depolama konumu kutlamak yeni bir yığın tipi örneği oluşturur ve tüm alanları değer türü depolama konumundan yeni örneğin karşılık gelen alanlarına kopyalar. Bir değer türünün ayrıştırılması, tüm alanları karşılık gelen yığın nesne türü örneğinden, değer türü bir depolama yerinin karşılık gelen alanlarına kopyalar.

2

C# Tipi Sistem üç Tür içerir, bunlar Değer Türleri, Referans Türleri ve İşaretçi Türleridir. C#, bir Değer Tipini bir Referans Tipine dönüştürmemize ve tekrar Değer Türlerine dönmemize olanak tanır. Bir Değer Tipinin bir Referans Tipine Dönüştürülmesi işlemi Boks olarak adlandırılır ve tersine işlem Unboxing olarak adlandırılır.

Boks

  1. int Val = 1;
  2. Object Obj = Val; //Boxing

biz Değer Türü Val oluşturulan ve Val için bir değer atanmış ilk satırı. İkinci satırda, Obj Obj'nin bir örneğini oluşturduk ve Obj'nin değerini Obj'ye atadık.Yukarıdaki işlemden (Obje Obj = i), bir Değer Tipinin bir değerinin, karşılık gelen bir Referans Tipinin bir değerine dönüştürülmesini gördük. Bu tip operasyonlara Boks denir.

Unboxing

  1. int Val = 1;
  2. Object Obj = Val; //Boxing
  3. int i = (int)Obj; //Unboxing

ilk iki satır bir değer Tipi Kutu nasıl gösterir. Sonraki satır (int i = (int) Obj), Nesne'den Değer Türünü ayıklar gösterir. Bu, bir Referans Tipinin bir değerini bir Değer Tipinin değerine dönüştürmektir. Bu işlem UnBoxing olarak adlandırılır.

Boks ve UnBoxing, hesaplama açısından pahalı süreçlerdir. Bir değer türü kutulu olduğunda, tamamen yeni bir nesne tahsis edilmeli ve oluşturulmalıdır, ayrıca Unboxing için gerekli olan döküm de hesaplama açısından pahalıdır

İlgili konular