本文是第六章的另一个部分——类型强制转换

类型转换

C#支持类型转换,分为显性转换隐性转换

隐性转换

隐性转换就是直接可以a=b的,遵循一下几个规则:

值类型之间 可以,从小到大
可空类型之间 可以,按照对应的值类型的规则从小到大
值类型和可空类型之间 不可以

显性转换

显性转换是有风险的,有时候会出现数据不准确,有时候是报错。

在不考虑数字溢出之类的情况下,是可以转换的,可空类型同理;

  • 数字、char、enum之间可以用显性强制转换;
  • string和数字使用 x.parse()和x.Tostring()转换;
  • bool类型不能和其他类型转换

对象的相等性

引用对象的相等性

ReferenceEquals() object的静态方法,比较内存中的地址 null和null–>相等
Equals() 虚方法 可以自己重写
Equals(o1,o2) 静态,防止一个是空的,报错
== 最好重写一下

值类型

**ReferenceEquals()**比较引用(内存)。即使都是一样的也会Faslse,因为用这个涉及装箱

**Equals()**比较值。System.ValueType()对于值其实已经重载了好多,所以我们基本上可以用

但是一般不会用这两个