zoukankan      html  css  js  c++  java
  • 天轰穿C#教程之隐式转换方式[原创]


      上面已经说到,隐式转换就是不需要什么语法申明,例如:

      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

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

      本文为天轰穿原著,转载请注明出处及作者!

  • 相关阅读:
    HTTP状态码
    python 连接 MySQL 数据库
    JS事件基础和绑定
    7月13号:2D的转换和过渡,动画效果设置
    JS事件流
    7月14日:JS的基础语法
    JS对表单的操作
    7月16日:DOM总结
    DOM样式表
    7月9号
  • 原文地址:https://www.cnblogs.com/thcjp/p/2745772.html
Copyright © 2011-2022 走看看