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类。没有这个前提,它们之间就无法实现相互转换。
归根结底,这些转换还是继承关系间对象的转换,不存在继承关系,转换就不可能实现。
将基本类型或值类型转换成引用类型称为装箱,
将一个值类型变成了引用类型。具体代码的含义如下:
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类。没有这个前提,它们之间就无法实现相互转换。
归根结底,这些转换还是继承关系间对象的转换,不存在继承关系,转换就不可能实现。
相关文章推荐
- 编写高质量代码改善C#程序的157个建议——建议69:应使用finally避免资源泄漏
- c# WindowsService 的发布
- 编写高质量代码改善C#程序的157个建议——建议68:从System.Exception或其他常见的基本异常中派生异常
- C#中值类型和引用类型的区别深度分析
- C# Powerpoint 禁止或允许修改形状
- C#搜索文字在文件及文件夹中出现位置的方法
- 编写高质量代码改善C#程序的157个建议——建议67:慎用自定义异常
- 设计模式C#实现(二)——适配器模式
- C#多线程同步事件及等待句柄
- C#统计C、C++及C#程序代码行数的方法
- C# 未将对象引用设置到对象的实例
- C#中 哪些是值类型 哪些是引用类型
- c# 二元表达式
- 大白话系列之C#委托与事件讲解大结局
- C#使用RSA证书文件加密和解密示例(任意长度的内容)
- 大白话系列之C#委托与事件讲解(三)
- 大白话系列之C#委托与事件讲解(二)
- 大白话系列之C#委托与事件讲解(一)
- 大白话系列之C#委托与事件讲解(序言)
- .NET平台和Csharp编程开发学习教程