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 &nbsp;</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">&nbsp; 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'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span lang="EN-US" style="LETTER-SPACING: 0.1pt">System.SystemException&mdash;&mdash; </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'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span lang="EN-US">System.ApplicationException&mdash;&mdash;</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'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span lang="EN-US">StackOverflowException&mdash;&mdash;</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'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span lang="EN-US">EndOfStreamException&mdash;&mdash;</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'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span lang="EN-US">OverflowException&mdash;&mdash;</span><span style="FONT-FAMILY: 宋体">如果要在</span><span lang="EN-US">checked</span><span style="FONT-FAMILY: 宋体">环境下把包含值&ndash;</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>&nbsp;&nbsp;&nbsp;<a href="index.html">首页</a>&nbsp;&nbsp;&nbsp;<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 + -
显示快捷键?