100165374.htm
来自「C#高级编程(第三版),顶死你们。。 。up」· HTM 代码 · 共 84 行
HTM
84 行
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><title>
11.1.1 异常类
</title></head>
<body>
<div class="area">
<div class="col1">
<div class="lineBlue">
</div>
<!-- title -->
<div class="arcTitle">
<h1>
<a href="../16">
C#高级编程(第3版)【全文连载】
</a>
</h1>
<div style="text-align: center; font-size: 15px">
<a href="100165374.htm">
11.1.1 异常类
</a>
</div>
<div style="text-align: center; font-size: 15px">
<a class="url" href="../../default.htm">http://book.csdn.net/</a>
2006-10-13 14:41:00
</div>
<div style="margin: 0px auto; width: 700px; border: solid 1px #0b5f98;">
<div style="float: left; width: 16px; background-color: #0b5f98; color: White; padding: 1px;">
图书导读
</div>
<div style="float: right; width: 670px; text-align: left; line-height: 16pt; padding-left: 2px">
<!--导读-->
<h1 id="divCurrentNode" style="color: #b83507; width: 100%; text-align: left; font-size: 12px; padding-left: 2px">当前章节:<a href='100165374.htm'><font color='red'>11.1.1 异常类</font></a></h1>
<div id="divRelateNode" style="padding-left: 2px">
<div style='float:left;width:49%'>·<a href='100165371.htm'>10.2.4 完成WhatsNewAttributes示例</a></div><div style='float:right;width:49%'>·<a href='100165372.htm'>10.3 小结</a></div><div style='float:left;width:49%'>·<a href='100165373.htm'>11.1 错误和异常处理</a></div><div style='float:right;width:49%'>·<a href='100165375.htm'>11.1.2 捕获异常(1)</a></div><div style='float:left;width:49%'>·<a href='100165376.htm'>11.1.2 捕获异常(2)</a></div><div style='float:right;width:49%'>·<a href='100165377.htm'>11.1.3 用户定义的异常类(1)</a></div></div>
</div>
</div>
</div>
<!-- main -->
<div id="main">
<div id="text"> <link href="css.css" rel="stylesheet" type="text/css" /><h3 style="MARGIN-TOP: 3.25pt; MARGIN-LEFT: 0cm; MARGIN-RIGHT: 0cm; FTEL: 4.9pt"><span lang="EN-US">11.1.1 </span><span style="FONT-FAMILY: 黑体">异常类</span></h3>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体; LETTER-SPACING: -0.1pt">在</span><span lang="EN-US" style="LETTER-SPACING: -0.1pt">C#</span><span style="FONT-FAMILY: 宋体; LETTER-SPACING: -0.1pt">中,当出现某个异常错误条件时,就会创建一个异常对象。这个对象包含有助于跟踪问题的信息。我们可以创建自己的异常类</span><span lang="EN-US" style="LETTER-SPACING: -0.1pt">(</span><span style="FONT-FAMILY: 宋体; LETTER-SPACING: -0.1pt">详见后面的内容</span><span lang="EN-US" style="LETTER-SPACING: -0.1pt">)</span><span style="FONT-FAMILY: 宋体; LETTER-SPACING: -0.1pt">,但</span><span lang="EN-US" style="LETTER-SPACING: -0.1pt">.NET</span><span style="FONT-FAMILY: 宋体; LETTER-SPACING: -0.1pt">提供了许多预定义的异常类。</span></p>
<h4 style="FTEL: 0cm"><a ftel="_Toc507815040"><span style="FONT-FAMILY: 黑体">异常基类</span></a></h4>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体">本节将快速总结基类中可以使用的一些异常。</span><span lang="EN-US">Microsoft</span><span style="FONT-FAMILY: 宋体">在</span><span lang="EN-US">.NET</span><span style="FONT-FAMILY: 宋体">中定义了大量的异常类,这里不可能提供详尽的列表。图</span><span lang="EN-US">11-1</span><span style="FONT-FAMILY: 宋体">所示的类结构图显示了其中的一些类,给出了大致的模式。</span></p>
<p align="center"><span lang="EN-US"><img height="311" alt="" width="369" src="11/image001.gif" /></span></p>
<p style="FTEL: 8.15pt" align="center"><span style="FONT-FAMILY: 宋体">图</span><span lang="EN-US"> 11-1</span></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体">这个图中的所有类都在</span><span lang="EN-US">System</span><span style="FONT-FAMILY: 宋体">命名空间中,但</span><span lang="EN-US">IOException</span><span style="FONT-FAMILY: 宋体">和派生于</span><span lang="EN-US">IOException</span><span style="FONT-FAMILY: 宋体">的类除外,它们在</span><span lang="EN-US">System.IO</span><span style="FONT-FAMILY: 宋体">命名空间中,这个命名空间处理文件数据的读写。一般情况下,异常没有特定的命名空间,异常类应放在生成它们的类所在的命名空间中,因此与</span><span lang="EN-US">IO</span><span style="FONT-FAMILY: 宋体">相关的异常就在</span><span lang="EN-US">System.IO</span><span style="FONT-FAMILY: 宋体">命名空间中。许多基类命名空间中都有异常类。</span></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体">通常对于</span><span lang="EN-US">.NET</span><span style="FONT-FAMILY: 宋体">类来说,一般的异常类</span><span lang="EN-US">System.Exception</span><span style="FONT-FAMILY: 宋体">派生于</span><span lang="EN-US">System.Object</span><span style="FONT-FAMILY: 宋体">,通常不在代码中抛出这个</span><span lang="EN-US">System.Exception</span><span style="FONT-FAMILY: 宋体">对象,因为它无法确定错误情况的本质。</span></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体">在该层次结构中有两个重要的类,它们派生于</span><span lang="EN-US">System.Exception</span><span style="FONT-FAMILY: 宋体">:</span></p>
<p class="1" style="MARGIN-LEFT: 37.55pt; FTEL: -16.1pt"><span lang="EN-US">●<span style="FONT: 7pt 'Times New Roman'"> </span></span><span lang="EN-US" style="LETTER-SPACING: 0.1pt">System.SystemException—— </span><span style="FONT-FAMILY: 宋体; LETTER-SPACING: 0.1pt">通常由</span><span lang="EN-US" style="LETTER-SPACING: 0.1pt">.NET</span><span style="FONT-FAMILY: 宋体; LETTER-SPACING: 0.1pt">运行库抛出,或者有着非常一般的</span><span style="FONT-FAMILY: 宋体">本质、可以由几乎所有的应用程序抛出。例如,如果</span><span lang="EN-US">.NET</span><span style="FONT-FAMILY: 宋体">运行库检测到堆栈已满,就会抛出</span><span lang="EN-US">StackOverflowException</span><span style="FONT-FAMILY: 宋体">。另一方面,如果检测到调用方法时参数不正确,可以在自己的代码中选择抛出</span><span lang="EN-US">ArgumentException</span><span style="FONT-FAMILY: 宋体">或其子类。</span><span lang="EN-US">System.SystemException</span><span style="FONT-FAMILY: 宋体">的子类包括表示致命错误和非致命错误的异常。</span></p>
<p class="1" style="MARGIN-LEFT: 37.55pt; FTEL: -16.1pt"><span lang="EN-US">●<span style="FONT: 7pt 'Times New Roman'"> </span></span><span lang="EN-US">System.ApplicationException——</span><span style="FONT-FAMILY: 宋体">这个类非常重要,因为它是第三方定义的异常类。如果自己定义的异常覆盖了应用程序所独有的错误情况,就应使它们直接或间接派生于</span><span lang="EN-US">System.ApplicationException</span><span style="FONT-FAMILY: 宋体">。</span></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体">其他可能用到的异常类包括:</span></p>
<p class="1" style="MARGIN-LEFT: 37.55pt; FTEL: -16.1pt"><span lang="EN-US">●<span style="FONT: 7pt 'Times New Roman'"> </span></span><span lang="EN-US">StackOverflowException——</span><span style="FONT-FAMILY: 宋体">如果分配给堆栈的内存区域已满,就会抛出这个异常。如果一个方法连续地递归调用它自己,就可能发生堆栈溢出。这一般是一个致命错误,因为它禁止应用程序执行除了中断以外的其他任务。在这种情况下,甚至也不可能执行</span><span lang="EN-US">finally</span><span style="FONT-FAMILY: 宋体">块,通常用户自己不能处理像这样的错误。</span></p>
<p class="1" style="MARGIN-LEFT: 37.55pt; FTEL: -16.1pt"><span lang="EN-US">●<span style="FONT: 7pt 'Times New Roman'"> </span></span><span lang="EN-US">EndOfStreamException——</span><span style="FONT-FAMILY: 宋体">这个异常通常是因为要读到文件末尾而抛出的。第</span><span lang="EN-US">31</span><span style="FONT-FAMILY: 宋体">章将解释流,流表示数据源之间的数据流。</span></p>
<p class="1" style="MARGIN-LEFT: 37.55pt; FTEL: -16.1pt"><span lang="EN-US">●<span style="FONT: 7pt 'Times New Roman'"> </span></span><span lang="EN-US">OverflowException——</span><span style="FONT-FAMILY: 宋体">如果要在</span><span lang="EN-US">checked</span><span style="FONT-FAMILY: 宋体">环境下把包含值–</span><span lang="EN-US">40</span><span style="FONT-FAMILY: 宋体">的</span><span lang="EN-US">int</span><span style="FONT-FAMILY: 宋体">类型数据转换为</span><span lang="EN-US">uint</span><span style="FONT-FAMILY: 宋体">数据,就会抛出这个异常。</span></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体">我们不打算讨论图</span><span lang="EN-US">11-1</span><span style="FONT-FAMILY: 宋体">中的所有其他异常类,您可以通过它们的名称猜出它们的作用。</span></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体">异常的类层次结构并不多见,因为其中的大多数类并没有给它们的基类添加任何功能。但是在异常处理时,添加继承类的一般原因是更准确地指定错误,所以不需要重写方法或添加新方法</span><span lang="EN-US">(</span><span style="FONT-FAMILY: 宋体">但常常要添加额外的属性,以捕获有关错误情况的额外信息</span><span lang="EN-US">)</span><span style="FONT-FAMILY: 宋体">。例如,当传递了不正确的参数值时,</span><span lang="EN-US">ArgumentException</span><span style="FONT-FAMILY: 宋体">类可用来调用方法,</span><span lang="EN-US">ArgumentNullException</span><span style="FONT-FAMILY: 宋体">派生于</span><span lang="EN-US">ArgumentException</span><span style="FONT-FAMILY: 宋体">类,它专门用于传送参数值是</span><span lang="EN-US">Null</span><span style="FONT-FAMILY: 宋体">的情况。</span></p></div>
<!-- page -->
<div class="page" style="text-align: center">
<a href="100165373.htm">上一页</a> <a href="index.html">首页</a> <a href="100165375.htm">下一页</a>
</div>
<div style="margin: 0px auto; width: 700px; border: solid 1px #0b5f98;">
<div style="float: left; width: 16px; background-color: #0b5f98; color: White; padding: 1px;">
图书导读
</div>
<div style="float: right; width: 670px; text-align: left; line-height: 16pt; padding-left: 2px">
<!--导读-->
<h1 id="divCurrentNode2" style="color: #b83507; width: 100%; text-align: left; font-size: 12px; padding-left: 2px">当前章节:<a href='100165374.htm'><font color='red'>11.1.1 异常类</font></a></h1>
<div id="divRealteNod2" style="padding-left: 2px">
<div style='float:left;width:49%'>·<a href='100165371.htm'>10.2.4 完成WhatsNewAttributes示例</a></div><div style='float:right;width:49%'>·<a href='100165372.htm'>10.3 小结</a></div><div style='float:left;width:49%'>·<a href='100165373.htm'>11.1 错误和异常处理</a></div><div style='float:right;width:49%'>·<a href='100165375.htm'>11.1.2 捕获异常(1)</a></div><div style='float:left;width:49%'>·<a href='100165376.htm'>11.1.2 捕获异常(2)</a></div><div style='float:right;width:49%'>·<a href='100165377.htm'>11.1.3 用户定义的异常类(1)</a></div></div>
</div>
</div>
</div></div>
</body>
</html>
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?