ASP.NET检查和取消检查关键字的用法分析
本文举例说明了检查和取消检查关键字在ASP.NET的用法。分享给大家参考。具体分析如下:
选中和未选中是两个很少使用的关键词,但它们是非常有用的关键词。因此,建议在测试时打开全局选中的编译器选项。
1.一段没有经过编译的代码
复制代码如下:int a=int。MaxValue * 2;以上代码段没有经过流程编译,VS2010中红色波浪线表示这段代码有一个标题:“检查模式下编译时操作溢出”。这意味着编译器将在编译时检查数学运算是否溢出。但是,在编译期间可以搜索和检测的溢出场景仅限于应用常数的操作。2中的代码编译器不会报告任何错误。
2.在整个过程中编译但不能得到正确结果的一段代码
复制代码如下:int temp=int。MaxValueint a=temp * 2;控制台。写(a);我首先给出了常量int的值。MaxValue应用于变量temp,然后将该变量乘以2,将其赋给;该代码可以正常执行,执行结果将输出为-2。这肯定了在运行时,默认的场景方法不会检查算术运算是否溢出,cpu会按照规则计算,结果是对是错不是他的错。这是一个非常危险的景象。我们如何避免这种危险?请参见3
3.发生溢出时,应用选中的关键字进行报警
复制代码如下:int temp=int。MaxValue尝试{ int a=checked(temp * 2);控制台。write line(a);} catch(溢出异常){console。writeline('溢出,惩罚');}使用checked关键字润色temp*2的规划结果,溢出时使用try catch进行惩罚。上面的代码会输出:“溢出,你要处理惩罚。”题目是,如果一段代码中有很多算术运算需要溢出搜索,就会有很多表达式经过检查和润色。我该怎么办?请参见4
4.选中的关键字可以修饰语句块,请参见下面的代码
复制代码如下:int temp=int。MaxValue尝试{ checked { int num=temp/20;int a=temp * 2;int c=temp * 1000}} catch(溢出异常){console。writeline('溢出,惩罚');}上述证词的输出结果与3相同
5.checked在避免算术溢出方面是有效的。不检查怎么办?有效吗?答案是必然的。有时候我们不需要正确的规划结果,只需要一个数字。溢出不溢出没关系。比如生成对象的HashCode,根据算法规划相对随机数,不需要正确的结果。下面的代码片段
复制的代码如下: class person { public string name { get;设置;}公共字符串Title { get设置;} public override int GetHashCode(){ return unchecked(Name。GetHashCode()标题。GetHashCode());}}unchecked还可以润色语句块,其用法与checked完全相同。
6.选中和未选中可以嵌套,尽管这是没有意义的。该语句是选中的、通过比较嵌套的、选中的还是未选中的?
7.从IL中查看选中的关键字C#代码:
复制代码如下:静态void main(string[]args){ int a=int . max value;int b=a * 2;int c=checked(a * 2);int d=未选中(a3);控制台。read();}对应的IL复制代码如下:方法private hide by SIG static void main(string[]args)cil managed {。entrypoint//codesize26 (0x1a)。maxstack 2。局部变量init ([0] int32 a,[1] int32 b,[2] int32 c,[3]int 32d)IL _ 0000: nop IL _ 00013360 LDC . i4 0 x7fffffff IL _ 0006: stloc . 0 IL _ 0007: ldloc . 0 IL _ 0008: LDC . i4 . 2 IL _ 0009: mul控制台: read()IL _ 0018: pop IL _ 0019: ret }//方法程序结束:Main
查看IL中红色和绿色突出显示的代码,我们可以看到,应用checked时,IL的操作为mul.ovf,未选中或未选中时,IL的操作功能为mul或add,无。ovf。
8.选中或未选中仅影响它包装的语句,而不影响包装语句中调用函数的代码块,如下例所示:
复制代码如下:静态void main(string[]args){ int a=int . max value;int b=20选中{ int c=TestMethod(a,b);控制台。write line(c);}}static int TestMethod(int a,int b){ return a* b;}以上代码将正常执行,勾选的语句块没有发挥应有的作用。
9.全局打开或关闭选中的编译选项。在项目属性页选择“生成”选项卡,然后点击“高级”按钮,选择“搜索数学运算溢出”选项,如下图所示
希望这篇文章对大家的ASP.NET节目设计有所帮助。
版权声明:ASP.NET检查和取消检查关键字的用法分析是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。