checked是用来检查数据是否溢出  听说uncheck是用来不检查的  那么c#默认检查还是不检查啊  checked与uncheck与默认岂不有一个作用重复了么
我很迷惑 想请高人指点。

解决方案 »

  1.   

    编译器默认值是 /checked-,也就是不检查。
      

  2.   

    checked 或 unchecked 关键字范围内的整数算法语句不受 /checked 选项的影响。
      

  3.   

    因为你可以用 /checked 选项指定,不在 checked 或 unchecked 关键字的范围内、并且产生的值超出数据类型范围的整数算法语句是否将导致运行时异常。
      

  4.   

    check 就是检查溢出啊 uncheck就是不检查溢出
      

  5.   

    使用checked
    若运算是常量表达式,则产生编译错误:The operation overflows at complie time in checked mode.
    若运算是非常量表达式,则运行时会抛出一个溢出异常:OverFlowException异常
    使用unchecked
    无论运算是否是常量表达式,都没有编译错误或是运行时异常发生,只是返回值被截掉不符合目标类型的高位。
    既未使用checked又未使用unchecked
    若运算是常量表达式,默认情况下总是进行溢出检查,同使用checked一样,会无法通过编译。
    若运算是非常量表达式,则是否进行溢出检查,取决于外部因素,包括编译器状态、执行环境参数等
    如果同时在程序代码中指定 checked或unchecked标志,又有了checked编译器选项,则除了标志为unchecked的代码外,其余的都有checked语义
      

  6.   

    unchecked 关键字用于取消整型算术运算和转换的溢出检查。  来个例子吧:
             unchecked
    {
        int val = 2147483647 * 2;
    }
    你想想整形是多大啦,这个肯定会超过整型的大小所以就要避免溢出啰
    因为上面的计算在 unchecked 块中执行,所以结果对于整数来说太大这一事实被忽略,并且 val 被赋予值 -2。返回的是-2结果(默认的)再来个例子吧:
    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
    因为溢出就输出默认值-2 没有溢出就直接输出啰