2 类型转换
面试出现频率:主要考察装箱和拆箱。对于有笔试题的场合也可能会考一些基本的类型转换是否合法。
重要程度:10/10
CLR最重要的特性之一就是类型安全性。在运行时,CLR总是知道一个对象是什么类型。对于基元类型之间的相互转换,可以显式或者隐式执行,例如将一个int转换为long。但如果将精度较大的类型转化为精度较小的类型,必须显式执行,且可能会丢失精度,但不会发生异常。可以利用checked关键字强制掷出OverflowException异常。
CLR允许将一个对象转化为它的任何基类型。C#不要求任何特殊语法即可将一个对象转换为它的任何基类型。然而,将对象转换为它的某个派生类型时,C#要求开发人员只能进行显式转换,因为这样的转换可能在运行时失败。
2.1 基元类型的类型转换
对基元类型进行转换时,可以显式或者隐式执行。如果遇到丢失精度的情况,C#将会向下取整(即无论如何都是舍去)。例如,对int的最大值转换为byte,将会得到255。对一个小数位精度较高的数转化为小数位精度较低的数,则简单的舍去多余的小数位。
1 int a = int.MaxValue; 2 Console.WriteLine(a); 3 byte b = (byte) a; //255
如果去掉(byte),改为隐式执行,则会无法通过编译。可以利用checked关键字检查是否有溢出的情况。
1 checked 2 { 3 byte b = (byte)a; //Overflow 4 Console.WriteLine(a + 1); //Overflow 5 Console.WriteLine(b); 6 }