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