技术开发 频道

C#类型转换之初级篇


    2.1 显式转换和隐式转换

    从直观上看,显式和隐式转换只是语法上面的差别。当发生类型转换时,如果在代码中明确指定了目标类型,则称为显式转换,否则则称为隐式转换。

C#通过将形如“(目标类型)”这样的语法构造放在待转换对象的前面,来表示一个显式转换。

下面的代码介绍了在C#语言中进行显式和隐式转换时的语法。

1int x = 10; 2long y = x; // 隐式转换 3x = (int) long; // 显示转换 4
    需要注意的是,不是任意两种类型之间都能随意进行转换的。另外,无论显式转换还是隐式转换,都可能会失败。 

    如果显式转换失败,会在运行时抛出异常(这个异常可能是InvalidCastException,也可能是InvalidOperationException、OverflowException等具体异常);如果隐式转换失败,则会在编译时得到一个错误,指出不能进行隐式转换。 

    最后,隐式转换也可以用显式转换替代,但显式转换不能用隐式转换替代。换句话说,可以用显式转换的地方,用隐式转换也没什么问题;但需要显式转换的地方,就一定不能用隐式转换。 

    下面将从另外一种角度介绍各种不同的类型转换。 

    2.2 变换、投射、装箱/拆箱 

    根据参与类型转换的两种类型(源类型和目标类型)的关系不同,可以将类型转换分成三种;即:

 如果源类型和目标类型一个是值类型一个是引用类型,则称为装箱/拆箱;

 如果源类型和目标类型之间存在着直接或间接继承,则称为投射;

 如果源类型和目标类型不具备上述两种关系,如两种简单值类型或兄弟/邻居类型(有着共同的祖先类)之间,则称为普通类型转换(或称“变换”)。 

    变换 

    变换是最普通的一种类型转换,通常发生在:

 简单(内置)值类型之间;

 重载了类型转换运算符的类型之间;

    简单值类型就是int、long、float、double等类型。在这些类型之间转换的时候,如果不会发生精度损失,则可以使用隐式转换,否则必须使用显式转换。换言之,从较短的类型向较长的类型转换,可以用隐式转换;从较长的向较短的转换,必须用显式转换(“长短”指的是:int长4字节,long长8字节,所以int比long短。)

0
相关文章