十二:checked和unchecked

     简单来说checked和unchecked操作符用于整型算术运算时控制当前环境中的
溢出检查。看以下代码:(注:Byte为无符号8位值,0到255)

(1)

Byte b = 400;

b = (Byte)(b + 400);

(2)

Byte b = 200;

b = (Byte)(b + 200);

(3)

Byte b = 200;

b = checked((Byte)(b + 200));

(4)

Byte b = 200;

b = (Byte)checked(b + 200);

说明:

(1)编译第一行就通不过,常量值“400”无法转换为“byte”

(2)编译通过,此时b的值为144。该代码执行时第一步要求所有操作数都扩展为32位值,如果不够的话再扩展为64位,所以b和200首先转换成32位的值,然后再加到一起,结果是一个32位的400,该值在存回到变量b之前,必须显示转换成Byte。

(3)做益出检查,抛出OverflowException异常。

(4)编译通过,b为144。

C#编译器默认的是不进行益出检查(unchecked),因为益出检查会造成一定性能的损失。

C#还支持checked和unchecked语句块,如下:

checked

{

Byte b = 200;

b = (Byte)(b + 200);

}

System.Decimal类型是一个非常特殊的类型,它对cheched和unchecked都失去效用。

posted @ 2009-01-26 19:39  Done  阅读(779)  评论(4编辑  收藏  举报