您的位置:首页 > 编程语言 > C#

天轰穿C#教程之隐式转换方式[原创]

2012-10-30 09:19 295 查看
  上面已经说到,隐式转换就是不需要什么语法申明,例如:

  byte bt = 1;

  short s = 35;

  int x = bt; //将byte类型直接交给int类型,这就是一次隐式转换

  int y = s; //同上

  转换有一个前提,那就是只要能保证值不会发生任何变化,类型转换就可以成功进行。但是,在转换之前编译器会判断一次,这个判断是不管值是否能够保证的。编译器只看类型的大小。所以隐式转换的前提是,位数小的类型向大的转换,且能够保证值不发生变化就可以自动转换。

  上面两个实例你应该看出来了,都是扩大转换。比如下面实例,将int类型的转换为byte类型这样的缩小转换,要想也隐式实现就会出错,因为int类型比byte类型大,这就有可能导致数据丢失。所以编译器会提示错误,如下例,我们先申明一个int类型的变量,然后试图将这个int类型的变量隐式转换为byte类型。如图2-20



  图 2-20

  下表显示了预定义的隐式数值转换。隐式转换可能在多种情形下发生,包括调用方法时和在赋值语句中。



  隐式转换需要注意以下几点:

  可空类型隐式转换为其它可空类型,应遵循表上表非可空类型的转换规则。即int? 隐式转换为long?、float?、double?和decimal?。

  非可空类型隐式转换为可空类型也遵循表上表中的转换规则,即int隐式转换为long?、float?、double?和decimal?。

  可空类型不能隐式转换为非可空类型,此时必须进行显式转换,如下一节所述。这是因为可空类型的值可以是null,但非可空类型不能表示这个值。

  从 int、uint 或 long 到 float 的转换以及从 long 到 double 的转换的精度可能会降低,但数值大小不受影响。

  不存在到 char 类型的隐式转换。

  不存在浮点型与 decimal 类型之间的隐式转换。

  int 类型的常数表达式可转换为 sbyte、byte、short、ushort、uint 或 ulong,前提是常数表达式的值处于目标类型的范围之内。

  另外,以下场合不适合隐式转换:

  ●int转换为short--会丢失数据

  ●int转换为uint--会丢失数据

  ●uint转换为int--会丢失数据

  ●float转换为int--会丢失小数点后面的所有数据

  ●任何数字类型转换为char --会丢失数据

  ●decimal转换为任何数字类型--因为decimal 类型的内部结构不同于整数和浮点数

  ●int? 转换为int--可空类型的值可以是null

  这些如果一定要转换,就需要使用显示转换来强迫编译器进行转换了。

  本文为天轰穿原著,转载请注明出处及作者!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: