数据类型的转换对于编程人员来说是一个非常常见的知识,相信每个程序员都会知道,而且经常使用,同时数据转换对于编程来说也是一个非常重要的知识点,今天就好好学习下吧!
一、隐式转换:同一性转换,隐式数值转换, 隐式枚举转换,隐式引用转换,包装转换,隐式常数表达式转换,用户自定义隐式转换(PS:微软C#文档上说的,具体类型还是一起学习吧,其实有些概念我也不清楚了)
同一性转换:把任何类型转换为统一的类型。只有在所需转换的实体可以被转换到一种特定的类型时才可以进行同一性转换
隐式数值转换:
从sbyte到 short, int, long, float, double或decimal。
从 byte 到 short, ushort, int, uint, long, ulong, float, double或decimal。
从 short 到 int, long, float, double或decimal。
从 ushort 到 int, uint, long, ulong, float, double或decimal。
从 int 到 long, float, double或decimal。
从 uint 到 long, ulong, float, double或decimal。
从 long 到 float, double或decimal。
从 ulong 到 float, double或decimal。
从 char到ushort,int,uint, long, ulong, float, double或decimal。
从 float到double。
从int,uint,long到float以及从long到double类型的转换可能会造成精度的损失,但并不会造成数量上的损失。除此之外的其他隐式数值转换不会损失任何信息。这里不存在转到char类型的隐式数值转换,也就是说其他的整型数据不会被自动地转换为字符型数据。
二、隐式枚举转换
一个隐式枚举转换允许小数-整数实字(decimal-integer-literal)被转换成任意的枚举类型。
三、隐式reference转换
从任意引用类型到对象。
从任意类类型 S 到任意类类型 T, 只要S是由T派生出来的。
从任意类类型S 到任意接口类型 T, 只要S实现 T。
从任意接口类型 S 到任意接口类型 T, 只要S是由T派生出来的。
从一个带有元素类型SE的数组类型S到一个带有元素类型TE 的 数组类型 T,只要下述各项均成立:S和T只是元素类型不同。换句话说,S和T有相同的维度;SE和TE都是引用类型;存在从SE到TE隐式引用转换;
从任意 数组类型到System.Array;
从任意 代表类型 到 System.Delegate;
从任意数组类型或代表类型到 System.Icloneable;
从null类型到任意引用类型。
隐式引用转换指的是在引用类型间肯定可以成功的类型转换,它们是不需要实时检测的
引用转换,不管是显式或是隐式的都不会改变被转换对象的引用一致性。换句话说,当引用转换发生时,它并未改变被转换对象的数值
四、隐式常数表达式转换允许下列类型的转换:
整型常数表达式可以被转换成为sbyte,byte,short,ushort,uint或者ulong类型,只有这个整型常数表达式的数值未超出目标类型的取值范围就行。
一个long类型的常数表达式可以被转换成为ulong类型,只有这个常数表达式的取值非负就行
五、用户自定义隐式转换
一个用户自定义转换包括可选的标准隐式转换,紧随其后的是一个用户自定义的隐式转换运算符,之后是另一个可选的标准隐式转换。
好了今天就学习到这,这主要是一些概念,真正使用还要看实际环境和系统要求了,明天继续学习显式转换;继续加油!