您的位置:首页 > 编程语言 > C#

C#值类型与引用类型间转换

2015-08-18 13:11 316 查看
值类型与引用类型间转换也称为装箱拆箱操作,

将基本类型或值类型转换成引用类型称为装箱,

将一个值类型变成了引用类型。具体代码的含义如下:
1)
int i=10:定义了一个整型变量i并赋初值。
2)
object obj=i:定义了一个引用类型obj,并将i的值赋值给obj,实现了装箱操作。扩大转换,可以隐式转换。
3)
i=20:改变i的值,obj的值并不发生变化。
实现的实质是:引用类型obj被赋值时,是将整型变量i值10复制存储到内存的一个区域(堆中),obj中存放此内存空间的指针(栈中)。所以i发生变化并不影响obj的值。

将引用类型转换为基本类型或值类型称为拆箱。

将一个引用类型变成了值类型。具体代码的含义如下:
1)
object obj=10:为引用类型obj赋值。
2)
int i=(int)obj:将引用类型obj显示转换为整型,实现了拆箱操作。这里是收缩转换,必须采用显式转换。
3)
i=20:整型变量值发生了改变,不影响obj的值。
装箱拆箱操作实质上是增加指针与去掉指针的操作,是一个挺浪费资源的过程,还可能引发错误。如果被拆箱的引用类型值为空null,或与对应基本类型或值类型冲突,就会引发抛出Sysytem.InvalidCastException异常。

拆箱异常。
object obj=10;
//float f=( float)obj;
说明:拆箱时类型指定与值不相符。因为obj值是个整型,要拆箱为浮点类型,就会发生异常。
值类型与引用类型间之所以能相互转换,是它们的根都是object类,都隐式继承于object类。没有这个前提,它们之间就无法实现相互转换。
归根结底,这些转换还是继承关系间对象的转换,不存在继承关系,转换就不可能实现。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: