基于继承的类型转换
继承是c#的一项功能,简单概括是当一个类继承另一个类后,会获得他的所有东西。
相较于手写所有东西,手写可能遗漏。而继承能保证一定会有所有东西。
例如香蕉,继承了水果。水果有什么特点,香蕉就有什么特点。
所以香蕉可以当作水果来用。一个水果类型的变量,可以装香蕉类型的值。
基于此特点的变量装值,他就是这么装进去了,什么也不会发生。
但是,在你使用变量的时候,你只能使用变量类型的东西。
因为编译器不知道这个变量的值实际上装了个什么类型。
隐式转换
香蕉是水果,所以水果可以装香蕉。此过程是一定安全的。
于是你直接写就可以了。
强制转换
水果装香蕉,这个就不一定能成功。苹果也是水果,如果你拿着苹果转香蕉,就会出错。
此过程需要强制转换表达式来指明。继承的强制转换,如果类型不符合就会出错。
写法是用在值前面加一个前置括号,表示要转换的类型。
自定义的转换
自定义转换是人为控制的转换。可以随便写,可能出现和预期不合的情况。
当然这是说如果交给你乱写。官方写的自定义转换还是和预期相符合的。
自定义转换和继承转换的区别在于,自定义转换会执行操作。
判断有没有自定义转换的方式是看他点出来的运算符。
自定义隐式转换
隐式转换通常意味着这样转换很安全,很能符合人们预期的结果。
例如从char到int。
char是16字节存储。这个数字最大值就是6万5千多。
而int的最大值是21亿。任何情况下都可以包容。
自定义显式转换
double类型能储存的最大值比int类型大。
那么用double类型转为int类型,则可能出现不符合预期的结果。
显式转换同样需要强制转换表达式来注明。
方法转换
自定义转换和继承转换都是不会出错的(不乱写的情况下)。
专门为他们写了这种方法说明这些类型之间有很亲密的关系。
但方法,就说明这两种类型没多少关系了。
例如文字转数字,只能一个字一个字地去拆。
这种概念类似于屏幕识图,不止可能与预期不符了,甚至可能出错。