2010年5月21日(类型转换)

1、隐式转换:从类型A到类型B的转换可以在所有情况下进行,执行转换的规则非常简单,可以让编译器进行。隐式转换不需要做任何工作,也不需要编写代码。

任何类型A只要其取值范围完全包含在类型B的取值范围内,就可以隐式转换为类型B。其原因很简单,如果把一个值放在变量中,二该值超出了变量的取值范围,就会出问题。例如,short类型的变量可以存储0——32677的数字,而byte可以存储的最大值是255,所以如果要把一个short值转换为byte值,就会出问题。如果short包含的值在256——32767之间,该值就不能放在byte中。但是,如果short类型变量中的值小于255,就应能转换这个值,对吗?答案是可以。具体地说也是可以,但是必须使用显式转换。执行显式转换有点类似于“我已经知道你对我这么做提出了警告,但我对其后果负责”。

2、显式转换:从类型A到类型B的转换只能在某些情况下进行,转换的规则比较复杂,应进行某种类型的处理。需要编写额外代码,代码的格式随着转换方法的不同而不同。

(1)强制转换进行显示转换,强制转换就是强迫数据从一种类型转换为另一种类型,这只在某些情况下是可行的,彼此之间没什么关系的类型不能进行数据类型强制转换。显然,当需要显式地把一种数据类型转换为另一种数据类型时,最好知道是否有数据丢失了。有两种方式可以检查数据是否丢失,一种方式是简单地检查原变量的值,另一种方式是迫使系统特别注意运行期间的转换。把一个值放在一个变量中,如果该值过大,不能放在类型变量中,就会导致溢出,这就需要检查。这需用到两个关键字checked和unchecked,称为表达式的溢出检查环境。例如:

byte destinationVar;

short sourceVar=281;

destinationVar=checked((byte)sourceVar);

Console.WriteLine(……);

在执行这段代码时,程序会崩溃,但是,在这段代码中,如果用unchecked替代checked,不会报错,但结果会错。

除使用关键字进行检查外,还可以配置开发环境进行检查。(vs环境右击项目—属性—生成—高级—检查运算上溢下溢)

(2)Convert命令进行显示转换(这种转换要注意的问题是,它们总是要进行溢出检查,checked和unchecked关键字以及项目属性设置没什么作用。在表达式中进行转换,必须考虑两种情况,因为每个非一元运算符的处理都可能要进行赋值运算符。例如:

shortVal*floatVal

其中把short值与一个float值相乘,要考虑转换的问题,相乘的结果也要考虑转换问题。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值