📄 《_net编程先锋c#》第七章 异常处理_c#语言_网络教程.htm
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0060)http://www.qostudy.org/pr/Article/aspnet/c/200605/16913.html -->
<HTML><HEAD><TITLE>《.net编程先锋C#》第七章 异常处理_C#语言_网络教程</TITLE>
<META http-equiv=Content-Language content=zh-cn>
<META http-equiv=Content-Type content="text/html; charset=gb2312">
<META content="《.net编程先锋C#》第七章 异常处理" name=keywords>
<META content="《.net编程先锋C#》第七章 异常处理" name=description><LINK
href="《_net编程先锋C#》第七章 异常处理_C#语言_网络教程.files/Skin1.css" type=text/css
rel=stylesheet>
<META content="MSHTML 6.00.2900.2963" name=GENERATOR></HEAD>
<BODY leftMargin=0 topMargin=0>
<TABLE class=maintabale style="BORDER-COLLAPSE: collapse" height=383
cellPadding=0 width=760 border=0>
<TBODY>
<TR>
<TD height=108>
<DIV align=center>
<TABLE style="BORDER-COLLAPSE: collapse" height=99 cellSpacing=0
cellPadding=2 width="98%">
<TBODY>
<TR>
<TD width=202><A title=网络教程 href="http://www.qostudy.org/pr/"
target=_blank><IMG height=86
src="《_net编程先锋C#》第七章 异常处理_C#语言_网络教程.files/logo.gif" width=190
border=0></A></TD>
<TD>
<DIV class=adsense id=ad005>
<SCRIPT type=text/javascript><!--
google_ad_client = "pub-3118933189526443";
google_ad_width = 468;
google_ad_height = 60;
google_ad_format = "468x60_as_rimg";
google_cpa_choice = "CAAQhZOgnAIaCCfXj46FmpPgKJnA93M";
google_ad_channel = "";
//--></SCRIPT>
<SCRIPT src="《_net编程先锋C#》第七章 异常处理_C#语言_网络教程.files/show_ads.js"
type=text/javascript>
</SCRIPT>
</DIV></TD></TR></TBODY></TABLE></DIV></TD></TR>
<TR>
<TD width="95%" height=30>
<DIV align=center>
<TABLE style="BORDER-COLLAPSE: collapse" cellPadding=0 width="98%"
border=0>
<TBODY>
<TR>
<TD>您的位置: <A class=LinkPath
href="http://www.qostudy.org/pr/">网络教程</A> >> <A
class=LinkPath
href="http://www.qostudy.org/pr/Article/aspnet/Index.html">Windows.NET教程</A> >> <A
class=LinkPath
href="http://www.qostudy.org/pr/Article/aspnet/c/Index.html">C#语言</A> >> 文章正文</TD></TR></TBODY></TABLE></DIV></TD></TR>
<TR>
<TD width="95%" height=239>
<DIV align=center>
<TABLE style="BORDER-COLLAPSE: collapse" height="98%" cellSpacing=0
cellPadding=2 width="98%">
<TBODY>
<TR>
<TD colSpan=3 height=20> </TD></TR>
<TR>
<TD colSpan=3 height=44>
<P align=center> <B><FONT face=宋体 size=3>《.net编程先锋C#》第七章
异常处理<BR><BR></FONT></B>作者:佚名 文章来源:不详 点击数:
<SCRIPT language=javascript
src="《_net编程先锋C#》第七章 异常处理_C#语言_网络教程.files/GetHits.htm"></SCRIPT>
更新时间:2006-5-8</P></TD></TR>
<TR>
<TD colSpan=3 height=28>
<HR color=#ffffff SIZE=1>
</TD></TR>
<TR>
<TD width=3 rowSpan=3></TD>
<TD vAlign=top align=justify height=20></TD>
<TD width=3 rowSpan=3></TD></TR>
<TR>
<TD vAlign=top align=justify>
<TABLE cellSpacing=0 cellPadding=0 align=left border=0>
<TBODY>
<TR>
<TD>
<DIV class=adsense id=ad001>
<SCRIPT type=text/javascript><!--
google_ad_client = "pub-3118933189526443";
google_ad_width = 336;
google_ad_height = 280;
google_ad_format = "336x280_as";
google_ad_type = "text_image";
google_ad_channel ="";
google_color_border = "A43232";
google_color_bg = "A43232";
google_color_link = "FFFFFF";
google_color_text = "FFFFFF";
google_color_url = "FFFFFF";
//--></SCRIPT>
<SCRIPT src="《_net编程先锋C#》第七章 异常处理_C#语言_网络教程.files/show_ads.js"
type=text/javascript>
</SCRIPT>
</DIV>
<DIV class=adsense id=ad002
style="LEFT: 770px; WIDTH: 160px; POSITION: absolute; TOP: 0px; HEIGHT: 600px">
<SCRIPT type=text/javascript><!--
google_ad_client = "pub-3118933189526443";
google_ad_width = 160;
google_ad_height = 600;
google_ad_format = "160x600_as";
google_ad_type = "text_image";
google_ad_channel ="";
google_color_border = "A43232";
google_color_bg = "A43232";
google_color_link = "FFFFFF";
google_color_url = "FFFFFF";
google_color_text = "FFFFFF";
//--></SCRIPT>
<SCRIPT src="《_net编程先锋C#》第七章 异常处理_C#语言_网络教程.files/show_ads.js"
type=text/javascript>
</SCRIPT>
</DIV></TD></TR></TBODY></TABLE>第七章
异常处理<BR>通用语言运行时(CLR)具有的一个很大的优势为,异常处理是跨语言被标准化的。一个在C#中所引发的异常可以在Visual
Basic客户中得到处理。不再有 HRESULTs 或者 ISupportErrorInfo
接口。<BR>尽管跨语言异常处理的覆盖面很广,但这一章完全集中讨论C#异常处理。你稍为改变编译器的溢出处理行为,接着有趣的事情就开始了:你处理了该异常。要增加更多的手段,随后引发你所创建的异常。</P><P>7.1
校验(checked)和非校验(unchecked)语句<BR>当你执行运算时,有可能会发生计算结果超出结果变量数据类型的有效范围。这种情况被称为溢出,依据不同的编程语言,你将被以某种方式通知——或者根本就没有被通知。(C++程序员听起来熟悉吗?)<BR>那么,C#如何处理溢出的呢?
要找出其默认行为,请看我在这本书前面提到的阶乘的例子。(为了方便其见,前面的例子再次在清单 7.1
中给出)</P><P>清单 7.1 计算一个数的阶乘</P><P>1: using
System;<BR>2: <BR>3: class Factorial<BR>4: {<BR>5: public static
void Main(string[] args)<BR>6: {<BR>7: long nFactorial = 1;<BR>8:
long nComputeTo = Int64.Parse(args[0]);<BR>9: <BR>10: long nCurDig =
1;<BR>11: for (nCurDig=1;nCurDig <= nComputeTo; nCurDig++)<BR>12:
nFactorial *= nCurDig;<BR>13: <BR>14: Console.WriteLine("{0}! is
{1}",nComputeTo, nFactorial);<BR>15: }<BR>16:
}</P><P>当你象这样使用命令行执行程序时<BR>factorial
2000</P><P>结果为0,什么也没有发生。因此,设想C#默默地处理溢出情况而不明确地警告你是安全的。<BR>通过给整个应用程序(经编译器开关)或于语句级允许溢出校验,你就可以改变这种行为。以下两节分别解决一种方案。<BR>7.1.1
给溢出校验设置编译器<BR>如果你想给整个应用程序控制溢出校验,C#编译器设置选择是正是你所要找的。默认地,溢出校验是禁用的。要明确地要求它,运行以下编译器命令:<BR>csc
factorial.cs
/checked+</P><P>现在当你用2000参数执行应用程序时,CLR通知你溢出异常(见图
7.1)。</P><P>图
7.1 允许了溢出异常,阶乘代码产生了一个异常。</P><P> 按OK键离开对话框揭示了异常信息:<BR>Exception
occurred: System.OverflowException<BR>at
Factorial.Main(System.String[])</P><P> 现在你了解了溢出条件引发了一个
System.OverflowException异常。下一节,在我们完成语法校验之后,如何捕获并处理所出现的异常?<BR>7.1.2 语法溢出校验<BR> 如果你不想给整个应用程序允许溢出校验,仅给某些代码段允许校验,你可能会很舒适。对于这种场合,你可能象清单7.2中显示的那样,使用校验语句。</P><P>清单
7.2 阶乘计算中的溢出校验</P><P>1: using System;<BR>2: <BR>3:
class Factorial<BR>4: {<BR>5: public static void Main(string[]
args)<BR>6: {<BR>7: long nFactorial = 1;<BR>8: long nComputeTo =
Int64.Parse(args[0]);<BR>9: <BR>10: long nCurDig = 1;<BR>11: <BR>12:
for (nCurDig=1;nCurDig <= nComputeTo; nCurDig++)<BR>13: checked {
nFactorial *= nCurDig; }<BR>14: <BR>15: Console.WriteLine("{0}! is
{1}",nComputeTo, nFactorial);<BR>16: }<BR>17:
}</P><P> 甚至就如你运用标志
checked-编译了该代码,在第13行中,溢出校验仍然会对乘法实现检查。错误信息保持一致。</P><P> 显示相反行为的语句是非校验(unchecked
)。甚至如果允许了溢出校验(给编译器加上checked+标志),被unchecked
语句所括住的代码也将不会引发溢出异常:</P><P>unchecked<BR>{<BR>nFactorial
*= nCurDig;<BR>}</P><P></P><P>7.2
异常处理语句<BR> 既然你知道了如何产生一个异常(你会发现更多的方法,相信我),仍然存在如何处理它的问题。如果你是一个 C++
WIN32
程序员,肯定熟悉SEH(结构异常处理)。你将从中找到安慰,C#中的命令几乎是相同的,而且它们也以相似的方式运作。</P><P>The
following three sections introduce C#'s exception-handling
statements:<BR>以下三节介绍了C#的异常处理语句:</P><P>。用 try-catch
捕获异常<BR>。用try-finally 清除异常<BR>。用try-catch-finally
处理所有的异常</P><P>7.2.1 使用 try 和
catch捕获异常<BR> 你肯定会对一件事非常感兴趣——不要提示给用户那令人讨厌的异常消息,以便你的应用程序继续执行。要这样,你必须捕获(处理)该异常。<BR>这样使用的语句是try
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -