首页 > 技术文章 > (原创)c#学习笔记05--变量的更多内容01--类型转换01--隐式转换

wodehao0808 2015-10-25 13:24 原文

第五章 变量的更多内容

  本章内容:

  ●  如何在类型之间进行隐式和显式转换
  ●  如何创建和使用枚举类型
  ●  如何创建和使用结构类型
  ●  如何创建和使用数组
  ●  如何处理字符串值

  首先要讨论的主题是类型转换,即把值从一种类型转换为另一种类型。

  接着阐述另外一些类型的变量:

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

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

    数组——包含一种类型的多个变量,可以以索引方式访问各个数值。

  这些类型比前面使用的简单类型复杂一些,但可以使工作更容易完成。最后,学习另一个与字符串相关的主题——基本字符串处理。

5.1  类型转换

  类型转换采用以下两种形式:

    隐式转换:从类型A到类型B的转换可以在所有情况下进行,执行转换的规则非常简单,可以让编译器执行转换。

    显式转换:从类型A到类型B的转换只能在某些情况下进行,转换的规则比较复杂,应进行某种类型的处理。

5.1.1  隐式转换

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

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没有隐式转换,但数值类型有一些隐式转换。表5-1列出了编译器可以隐式执行的数值转换(记住,char存储的是数值,所以char被当作一个数值类型)。

 

  这些类型的隐式转换规则是:任何类型A,只要其取值范围完全包含在类型B的取值范围内,就可以隐式转换为类型B。

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

  但是,如果short类型变量中的值小于255,就应能转换这个值,对吗?答案是可以。具体地说是可以,但必须使用显式转换。执行显式转换有点类似于“我已经知道你对在这么做提出了警告,但我将对其后果负责”。

推荐阅读