变量的更多内容-类型转换-隐式转换

    前面介绍了C#语言的一些内容,现在讨论与变量相关的其他问题。

    首先要讨论的是类型的转换,即把数值从一种类型转换为另一种类型。前面已经描述了其中的一些,这里则要正式进行讨论。掌握这个问题可以更好的理解表达式的混合使用的类型,更好的控制处理数据的方式。这有助于理解代码,避免不必要的误解。

    介绍完类型转换后,将阐述另外一些类型的变量:

     *枚举——变量类型,用户定义了一组可能的数值,这些数值可以用人类能理解的方式使用。

     *结构——合成的变量类型,由用户定义的一组其他变量类型组成。

     *数组——包含一种类型的多个变量,可以用下标访问各个数值。

    这些类型比前面使用的类型复杂一些,但可以使工作更容易完成。

    介绍完这些内容后,就要学习另一个与字符串相关的主题——基本字符串处理。

    隐式转换

    隐式转换不需要做任何工作,也不需要编写代码。考虑下面的代码:

     var1 = var2;

    如果var2的类型可以隐式的转换为var1的类型,这个赋值语句就涉及到一个隐式转换。它也可能只处理相同类型的两个变量,不需要隐式转换。

    下面看一个例子。

    ushort和char的值是可以互换的,因为它们都可以存储0~65535之间的数字,在这两个类型之间可以进行隐式转换,例如下面的代码:

     ushort destinationVar;

     char sourceVar = 'a';

     destinationVar = sourceVar;

     Console.WriteLine("sourceVar val: {0}",sourceVar);

     Console.WriteLine("destinationVar val: {0}",destinationVar);

    这里存储在sourceVar中的值放在destinationVar中。在用两个Console.WriteLine()命令输出变量时,得到如下结果:

     sourceVar val:a

     destinationVar val:97

    即使两个变量存储的是相同的信息,使用不同的类型解释它们时,方式也是不同的。

    简单类型有许多隐式转换:bool和string没有隐式转换,但数值类型有一些隐式转换。下面列出了编译器可以隐式执行的数值转换(记住,char存储的是数值,所以char被当做一个数值类型)。

     byte可以安全转换为:short,ushort,int,uint,long,ulong,float,double,decimal

     sbyte可以安全转换为:short,int,long,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

     float可以安全转换为:double

     char可以安全转换为:ushort,int,uint,long,ulong,float,double,decimal

    当然,没必要记住它们,因为很容易看出编译器可以执行哪些隐式转换。之前的一个表列出了每种简单数字类型的取值范围。这些类型的隐式转换规则是:任何类型A,只要其取值范围完全包含在类型B的取值范围内,就可以隐式转换为类型B。

    原因很简单,如果要把一个值放在变量中,而该值超出了变量的取值方位,就会出问题。例如,short类型的变量可以存储0~32677的数字,而byte可以存储的最大值是255,所以如果要把一个short值转换为byte值就会出问题。如果short包含的值在256~32767之间,该数值就不能放在byte中。

    但是,如果short类型变量中的值小于255,就能转换这个值,对吗?

    答案是可以,具体说可以,但必须使用显示转换,执行显示转换有点类似于“我已经知道你对我这么做提出了警告,但我将对其后果负责”

posted @ 2009-03-21 15:31    阅读(522)  评论(0编辑  收藏  举报