繁体   English   中英

拳击和拆箱也在施展?

[英]Boxing and unboxing is also casting?

当我们在原始数据类型之间转换数据类型时,它被称为数据类型转换。

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

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

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

C#Type System包含三种类型,它们是值类型,引用类型和指针类型。 C#允许我们将值类型转换为引用类型,然后再转换回值类型。 将值类型转换为引用类型的操作称为Boxing,反向操作称为Unboxing。

拳击

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

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

拆箱

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

前两行显示如何设置值类型。 下一行(int i =(int)Obj)显示从Object中提取值类型。 即将参考类型的值转换为值类型的值。 此操作称为UnBoxing。

拳击和解锁是计算上昂贵的过程。 当一个值类型被装箱时,必须分配和构造一个全新的对象,同时UnBoxing所需的强制转换也是昂贵的计算

Boxing是将值类型转换为类型对象并取消装箱以重新获取值的过程http://msdn.microsoft.com/en-us/library/yz2be5wk.aspx

铸造就是将一种类型转换为另一种类型

拳击基本上是将值类型装入匿名对象,以后可以取消装箱。

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

转换:(它主要是将一种类型的实例转换为另一种类型)

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.

希望能帮助到你。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM