C#类型系统是单根的
所有类型都可以向上转换为object
值类型可以转化为引用类型object
值类型和object类型的转换
装箱
拆箱
装箱-把值类型的实例转化为引用类型实例
目标可以是object/接口
拆箱-把引用类型转化为值类型
拆箱需要显式转换-强转
拆箱时,运行时会检查这个值类型和object对象的真实类型是否匹配
如果不匹配会抛异常
long x=(int)obj
先拆箱,使用(int)强转:object->int
隐式的数值转换:int->long
数组和泛型只支持引用转换,不支持装箱
1√
2×
装箱会把值类型的实例复制到1个新的对象
拆箱会把这个对象的内容再复制给1个值类型的实例
静态检查
运行时检查
ex-拆箱
每个在heap上的对象内部都存储了1个类型token,这个token可以通过调用object的GetType()方法来获取
GetType()方法和typeof操作符
在实例上调用GetType()方法-实例-运行时
在类型名上使用typeof操作符-类型-编译时-当涉及到泛型类型参数时,它是由JIT编译器来解析的
GetType()-实例-变量名-变量引用着1个实例
.Name
.FullName
typeof-类型名
ToString()方法-属于object类型的方法-和GetType()方法一样,通过实例调用
所有内置类型都重写了ToString()方法-所有内置类型都可以转换为string
如果自定义的类型没有重写ToString()方法则cw该类型的名称
Object类的成员列表