随笔 - 30  文章 - 0  评论 - 11 

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

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

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

在明确要求编译器把数值从一种数据类型转换为另外一种数据类型时,就是在执行显示转换

显示转换语法结构:destinationtypesourcevar)即目标变量的类型(源变量的值)

就是把sourcevar中的值转换为destinationtype类型

注意:显示转换也只是在某些情况下可行的,彼此之间没有什么关系的类型不能进行数据类型转换

显示转换是将取值范围大的类型转换成取值范围小的类型,所以显示转换就会发生数据丢失,即溢出

我们可以使用checkedunchecked关键字来检查溢出。它们称为表达式的溢出检查环境

checked 关键字用于对整型算术运算和转换显式启用溢出检查。

默认情况下,如果表达式产生的值超出了目标类型的范围,则常数表达式将导致编译时错误,而非常数表达式在运行时计算并将引发异常。不过,如果通过编译器选项或环境配置在全局范围内取消了溢出检查,则可以使用 checked 关键字来启用此项功能。

例:

此示例演示如何对非常数表达式使用 checked。在运行时会报告溢出。

using System;

class OverFlowTest

{

    static short x = 32767;   // Max short value

    static short y = 32767;

 

    // Using a checked expression

    static int CheckedMethod()

    {

        int z = 0;

        try

        {

            z = checked((short)(x + y));

        }

        catch (System.OverflowException e)

        {

            Console.WriteLine(e.ToString());

        }

        return z;

    }

 

    static void Main()

    {

        Console.WriteLine("Checked output value is: {0}",

                     CheckedMethod());

    }

}

 

示例输出:

System.OverflowException: 算术运算导致溢出。

   OverFlowTest.CheckedMethod() 位置 D:"My Documents"Visual Studio 2005"Proje

cts"ConsoleApplication1"ConsoleApplication1"Program.cs:行号 14

Checked output value is: 0

 

unchecked 关键字用于取消整型算术运算和转换的溢出检查。

在未检查的上下文中,如果表达式产生目标类型范围之外的值,则结果被截断。

例:

unchecked

{

    int val = 2147483647 * 2;

}

int的取值范围:在-2147483648~2147483647之间的整数

因为上面的计算在 unchecked 块中执行,所以结果对于整数来说太大这一事实被忽略,并且 val 被赋予值 -2。默认情况下,启用溢出检测,

 

这与使用 checked 具有相同的效果。

 

在上面的示例中,如果省略 unchecked,将产生编译错误,因为表达式使用常数,结果在编译时是已知的。unchecked 关键字还取消对非常数

 

表达式的溢出检测,这是为了避免在运行时导致 OverflowException

 

unchecked 关键字还可以用作运算符,如下所示:

public int UncheckedAdd(int a, int b)

{

    return unchecked(a + b);

}

:

此示例通过在常数表达式中使用 unchecked,显示如何使用 unchecked 语句。

using System;

class TestClass

{

    const int x = 2147483647;   // Max int

    const int y = 2;

 

    static void Main()

    {

        int z;

        unchecked

        {

            z = x * y;

        }

        Console.WriteLine("Unchecked output value: {0}", z);

    }

}

示例输出:

Unchecked output value: -2

文章是我在自学过程中对有关知识点的理解的笔记,如有错误和不全或您有更好的理解请在评论中指出,我定会及时更正。谢谢您的指点.笔记中如有涉及到学习资料中的版权问题请通知我删除
posted on 2008-08-24 08:42 国雄 阅读(108) 评论(0)  编辑 收藏 网摘 所属分类: C#自学专栏

标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
Google站内搜索
找找看



China-pub 计算机图书网上专卖店!6.5万品种 2-8折!
近千种 9-95 新二手计算图书火热销售中!
开发者征途系统新作:《设计模式——基于C#的工程化实现及扩展》


相关链接: