目录
什么是转换
隐式转换
有些类型的转换不会丢失数据或精度。
显式转换和强制转换
如果使用强制类型转换,就意味着要承担执行操作可能引起的丢失数据的后果
转换的类型
数字的转换
隐式数字转换
没有路径的就是需要显式转换,有路径的就是可以隐式转换
溢出检测上下文
显式数字转换
虚线路径表示显式转换
引用转换
引用类型对象由内存中的两部分组成:引用和数据
隐式引用转换
所有的引用类型可以隐式转换成object 类型
任何类型可以隐式转换到它继承的接口
类可以隐式转换到 : 他继承链中的任何类,它实现的任何接口
显式引用转换
显式引用转换是从一个普通类型到一个更精确类型的引用转换
显式转换包括: 从object到任何引用类型的转换 从基类到从它继承的类的转换
有效显式引用转换
装箱转换
包括值类型在内的所有C#类型都派生自 object 类型。默认情况下在堆上不包括它们的对象组件,如果需要对象组件,可以通过装箱。装箱是一种隐式转换,它接受值类型的值,根据这个值在堆上创建一个完整的引用类型对象并返回对象引用
装箱是创建副本
返回的是值的引用类型的副本,在装箱产生后,该值有两份副本--原始值类型和引用类型副本,每一个都可以独立操作
装箱转换
拆箱转换
拆箱是把装箱后的对象转换回值类型的过程
用户自定义转换
用户自定义转换的约束
多步转换:
is 运算符
有些转换是不成功的,并且会在运行时抛出一个InvalidCastException异常,我们可以使用is运算符来检查转换是否会成功
Expr 是源表达式
as 运算符
as 运算符和强制运算符类似,只是它不抛出异常,如果转换失败,它返回null 而不是抛出异常