2012-07-16 49 views
9

当我们在原始数据类型之间转换数据类型时,它被称为数据类型转换。拳击和拆箱也在铸造?

但是,当在ValueType和ReferenceType之间进行转换时,我们称之为装箱和取消装箱。

拳击和拆箱也可以称为铸造?

回答

8

拳击只是在对象壳体中包装一个值类型,本质上。它实际上并不涉及类型转换,如(int)3.14。即使他们都使用演员操作。

+0

感谢您的快速回答。等待任何其他答复! – LaysomeSmith 2012-07-16 21:27:24

0

拳击基本上拳击的值键入一个匿名对象,以后可以拆箱。

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 

拳击/拆箱不应该与类型转型混淆,因为拳击我们只是围绕变量包装。通过执行类型转换,您实际上正在更改变量或对象的类型。

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

问题是我们可以称为拳击和拆箱作为类型铸造? – LaysomeSmith 2012-07-16 21:45:38

+0

@LaysomeSmith增加了一点细节 – Mayank 2012-07-16 21:53:20

0

铸造:(它基本上是关于将一​​种类型的实例为另一种)

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). 

拳击:(复制值类型的给堆过程)

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

开箱(复印盒装值类型):

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

希望它有帮助。

0

每个不可为空的值类型都有一个关联的堆对象类型和相同的成员。装箱值存储位置将创建一个新的堆类型实例,并将所有字段从值类型存储位置复制到新实例的相应字段。取消装箱值类型会将其相应堆对象类型实例的所有字段复制到值类型存储位置的相应字段。

2

C#类型系统包含三种类型,它们是值类型,引用类型和指针类型。 C#允许我们将值类型转换为引用类型,并再次转换为值类型。将值类型转换为引用类型的操作称为装箱,将相反的操作称为拆箱。

拳击

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

我们创建了一个值类型瓦尔和分配一个值瓦尔第一行。第二行,我们创建了一个Object Obj的实例,并将Val的值赋给Obj。从上面的操作(Object Obj = i)我们看到了将值类型的值转换为相应引用类型的值。这些类型的操作称为拳击。

拆箱

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

前两行展示了如何框中输入一个值类型。下一行(int i =(int)Obj)显示从对象中提取值类型。这是将参考类型的值转换为值类型的值。这个操作被称为UnBoxing。

拳击和UnBoxing是计算成本很高的过程。当一个值类型被装箱时,一个全新的对象必须被分配和构造,并且UnBoxing所需的投射也是计算上昂贵的