一聚教程网:一个值得你收藏的教程网站

热门教程

《.net编程先锋C#》第七章 异常处理(转)

时间:2022-07-02 12:10:00 编辑:袖梨 来源:一聚教程网

第七章 异常处理
通用语言运行时(CLR)具有的一个很大的优势为,异常处理是跨语言被标准化的。一个在C#中所引发的异常可以在Visual Basic客户中得到处理。不再有 HRESULTs 或者 ISupportErrorInfo 接口。
尽管跨语言异常处理的覆盖面很广,但这一章完全集中讨论C#异常处理。你稍为改变编译器的溢出处理行为,接着有趣的事情就开始了:你处理了该异常。要增加更多的手段,随后引发你所创建的异常。
7.1 校验(checked)和非校验(unchecked)语句
当你执行运算时,有可能会发生计算结果超出结果变量数据类型的有效范围。这种情况被称为溢出,依据不同的编程语言,你将被以某种方式通知――或者根本就没有被通知。(C++程序员听起来熟悉吗?)
那么,C#如何处理溢出的呢? 要找出其默认行为,请看我在这本书前面提到的阶乘的例子。(为了方便其见,前面的例子再次在清单 7.1 中给出)
清单 7.1 计算一个数的阶乘
1: using System;
2:
3: class Factorial
4: {
5: public static void Main(string[] args)
6: {
7: long nFactorial = 1;
8: long nComputeTo = Int64.Parse(args[0]);
9:
10: long nCurDig = 1;
11: for (nCurDig=1;nCurDig <= nComputeTo; nCurDig++)
12: nFactorial *= nCurDig;
13:
14: Console.WriteLine("{0}! is {1}",nComputeTo, nFactorial);
15: }
16: }
当你象这样使用命令行执行程序时
factorial 2000
结果为0,什么也没有发生。因此,设想C#默默地处理溢出情况而不明确地警告你是安全的。
通过给整个应用程序(经编译器开关)或于语句级允许溢出校验,你就可以改变这种行为。以下两节分别解决一种方案。
7.1.1 给溢出校验设置编译器
如果你想给整个应用程序控制溢出校验,C#编译器设置选择是正是你所要找的。默认地,溢出校验是禁用的。要明确地要求它,运行以下编译器命令:

热门栏目