100165376.htm
来自「C#高级编程(第三版),顶死你们。。 。up」· HTM 代码 · 共 192 行 · 第 1/3 页
HTM
192 行
<td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 9.9pt; PADDING-LEFT: 9.9pt; PADDING-BOTTOM: 0cm; WIDTH: 88.15pt; BORDER-TOP-STYLE: none; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT-STYLE: none" valign="top" width="118">
<p class="a4" style="MARGIN-LEFT: 10.7pt"><span lang="EN-US">HelpLink</span></p>
</td>
<td style="PADDING-RIGHT: 9.9pt; PADDING-LEFT: 9.9pt; PADDING-BOTTOM: 0cm; WIDTH: 351.15pt; BORDER-TOP-STYLE: none; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none" valign="top" width="468">
<p class="a4" style="MARGIN-LEFT: 10.7pt"><span style="FONT-FAMILY: 宋体">链接到一个帮助文件上,以提供该异常的更多信息</span></p>
</td>
</tr>
<tr>
<td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 9.9pt; PADDING-LEFT: 9.9pt; PADDING-BOTTOM: 0cm; WIDTH: 88.15pt; BORDER-TOP-STYLE: none; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT-STYLE: none" valign="top" width="118">
<p class="a4" style="MARGIN-LEFT: 10.7pt"><span lang="EN-US">Message</span></p>
</td>
<td style="PADDING-RIGHT: 9.9pt; PADDING-LEFT: 9.9pt; PADDING-BOTTOM: 0cm; WIDTH: 351.15pt; BORDER-TOP-STYLE: none; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none" valign="top" width="468">
<p class="a4" style="MARGIN-LEFT: 10.7pt"><span style="FONT-FAMILY: 宋体">描述错误情况的文本</span></p>
</td>
</tr>
<tr>
<td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 9.9pt; PADDING-LEFT: 9.9pt; PADDING-BOTTOM: 0cm; WIDTH: 88.15pt; BORDER-TOP-STYLE: none; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT-STYLE: none" valign="top" width="118">
<p class="a4" style="MARGIN-LEFT: 10.7pt"><span lang="EN-US">Source</span></p>
</td>
<td style="PADDING-RIGHT: 9.9pt; PADDING-LEFT: 9.9pt; PADDING-BOTTOM: 0cm; WIDTH: 351.15pt; BORDER-TOP-STYLE: none; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none" valign="top" width="468">
<p class="a4" style="MARGIN-LEFT: 10.7pt"><span style="FONT-FAMILY: 宋体">导致异常的应用程序或对象名</span></p>
</td>
</tr>
<tr>
<td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 9.9pt; PADDING-LEFT: 9.9pt; PADDING-BOTTOM: 0cm; WIDTH: 88.15pt; BORDER-TOP-STYLE: none; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT-STYLE: none" valign="top" width="118">
<p class="a4" style="MARGIN-LEFT: 10.7pt"><span lang="EN-US">StackTrace</span></p>
</td>
<td style="PADDING-RIGHT: 9.9pt; PADDING-LEFT: 9.9pt; PADDING-BOTTOM: 0cm; WIDTH: 351.15pt; BORDER-TOP-STYLE: none; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none" valign="top" width="468">
<p class="a4" style="MARGIN-LEFT: 10.7pt"><span style="FONT-FAMILY: 宋体">堆栈上方法调用的信息,它有助于跟踪抛出异常的方法</span></p>
</td>
</tr>
<tr>
<td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 9.9pt; PADDING-LEFT: 9.9pt; PADDING-BOTTOM: 0cm; WIDTH: 88.15pt; BORDER-TOP-STYLE: none; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT-STYLE: none" valign="top" width="118">
<p class="a4" style="MARGIN-LEFT: 10.7pt"><span lang="EN-US">TargetSite</span></p>
</td>
<td style="PADDING-RIGHT: 9.9pt; PADDING-LEFT: 9.9pt; PADDING-BOTTOM: 0cm; WIDTH: 351.15pt; BORDER-TOP-STYLE: none; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none" valign="top" width="468">
<p class="a4" style="MARGIN-LEFT: 10.7pt"><span style="FONT-FAMILY: 宋体">抛出异常的方法的</span><span lang="EN-US">.NET</span><span style="FONT-FAMILY: 宋体">反射对象</span></p>
</td>
</tr>
<tr>
<td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 9.9pt; PADDING-LEFT: 9.9pt; PADDING-BOTTOM: 0cm; WIDTH: 88.15pt; BORDER-TOP-STYLE: none; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT-STYLE: none" valign="top" width="118">
<p class="a4" style="MARGIN-LEFT: 10.7pt"><span lang="EN-US">InnerException</span></p>
</td>
<td style="PADDING-RIGHT: 9.9pt; PADDING-LEFT: 9.9pt; PADDING-BOTTOM: 0cm; WIDTH: 351.15pt; BORDER-TOP-STYLE: none; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none" valign="top" width="468">
<p class="a4" style="MARGIN-LEFT: 10.7pt"><span style="FONT-FAMILY: 宋体">如果异常是在</span><span lang="EN-US">catch</span><span style="FONT-FAMILY: 宋体">块中抛出的,它就会包含把代码发送到</span><span lang="EN-US">catch</span><span style="FONT-FAMILY: 宋体">块中的异常对象</span></p>
</td>
</tr>
</tbody>
</table>
</div>
<p class="MsoNormal"><span lang="EN-US"> </span></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体">在这些属性中,如果可以进行堆栈跟踪,</span><span lang="EN-US">StackTrace</span><span style="FONT-FAMILY: 宋体">和</span> <span lang="EN-US">TargetSite</span><span style="FONT-FAMILY: 宋体">是由</span><span lang="EN-US">.NET</span><span style="FONT-FAMILY: 宋体">运行库自动提供的。</span><span lang="EN-US">Source</span><span style="FONT-FAMILY: 宋体">总是由</span><span lang="EN-US">.NET</span><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">Message </span><span style="FONT-FAMILY: 宋体">、</span><span lang="EN-US">HelpLink</span><span style="FONT-FAMILY: 宋体">和</span><span lang="EN-US">InnerException</span><span style="FONT-FAMILY: 宋体">必须由抛出异常的代码提供,其方法是在抛出异常前即时设置这些属性。例如,抛出异常的代码如下所示:</span></p>
<p class="2" style="MARGIN-TOP: 8.15pt; MARGIN-LEFT: 21.45pt; MARGIN-RIGHT: 0cm; FTEL: 18.45pt"><span lang="EN-US">if (ErrorCondition == true)</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">{</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US"> Exception myException = new ClassmyException("Help!!!!");</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US"> myException.Source = "My Application Name";</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US"> myException.HelpLink = "MyHelpFile.txt";</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US"> throw myException;</span></p>
<p class="2" style="MARGIN-TOP: 0cm; MARGIN-LEFT: 21.45pt; MARGIN-RIGHT: 0cm; FTEL: 18.45pt"><span lang="EN-US">}</span></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体; LETTER-SPACING: 0.1pt">其中</span><span lang="EN-US" style="LETTER-SPACING: 0.1pt">ClassMyException</span><span style="FONT-FAMILY: 宋体; LETTER-SPACING: 0.1pt">是抛出的特定异常类名。注意所有的异常类名通常以</span><span lang="EN-US" style="LETTER-SPACING: 0.1pt">Exception</span><span style="FONT-FAMILY: 宋体; LETTER-SPACING: 0.1pt">结</span><span style="FONT-FAMILY: 宋体; LETTER-SPACING: -0.1pt">尾。</span></p>
<h4 style="FTEL: 21.45pt"><span lang="EN-US">4. </span><span style="FONT-FAMILY: 黑体">没有处理异常时所发生的情况</span></h4>
<p class="MsoNormal"><a ftel="try3"><span style="FONT-FAMILY: 宋体; LETTER-SPACING: -0.1pt">有时生成了一个异常后,代码中没有</span><span lang="EN-US" style="LETTER-SPACING: -0.1pt">catch</span></a><span style="FONT-FAMILY: 宋体; LETTER-SPACING: -0.1pt">块能处理这类异常。前面的</span><span lang="EN-US" style="LETTER-SPACING: -0.1pt">SimpleExceptions</span><span style="FONT-FAMILY: 宋体; LETTER-SPACING: -0.1pt">示例就说明了这种情况。例如,假定忽略</span><span lang="EN-US" style="LETTER-SPACING: -0.1pt">FormatException</span><span style="FONT-FAMILY: 宋体; LETTER-SPACING: -0.1pt">和通用的</span><span lang="EN-US" style="LETTER-SPACING: -0.1pt">catch</span><span style="FONT-FAMILY: 宋体; LETTER-SPACING: -0.1pt">块,只有处理</span><span lang="EN-US" style="LETTER-SPACING: -0.1pt">IndexOutOfRangeException</span><span style="FONT-FAMILY: 宋体; LETTER-SPACING: -0.1pt">的块。此时,如果抛出一个</span><span lang="EN-US" style="LETTER-SPACING: -0.1pt">FormatException</span><span style="FONT-FAMILY: 宋体; LETTER-SPACING: -0.1pt">异常,会发生什么情况呢?</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">try</span><span style="FONT-FAMILY: 宋体">块<span style="LETTER-SPACING: -0.8pt">——</span></span><span style="LETTER-SPACING: -0.8pt"> </span><span style="FONT-FAMILY: 宋体">实际上在本示例中,就有一个在后台处理的嵌套</span><span lang="EN-US">try</span><span style="FONT-FAMILY: 宋体">块。</span><span lang="EN-US">NET</span><span style="FONT-FAMILY: 宋体">运行库可以把整个程序放在另一个更大的</span><span lang="EN-US">try</span><span style="FONT-FAMILY: 宋体">块中,每个</span><span lang="EN-US">.NET</span><span style="FONT-FAMILY: 宋体">程序都会这么做。这个</span><span lang="EN-US">try</span><span style="FONT-FAMILY: 宋体">块有一个</span><span lang="EN-US"> catch</span><span style="FONT-FAMILY: 宋体">处理程序,它可以捕获任何类型的异常。如果发生的异常代码没有处理,程序流就会退出程序,由</span><span lang="EN-US">.NET</span><span style="FONT-FAMILY: 宋体">运行库中的</span><span lang="EN-US">catch</span><span style="FONT-FAMILY: 宋体">块捕获它。但是,结果并不是你想像的那样。代码的执行会即时中断,并给用户显示一个对话框,通知用户代码没有处理异常,并给出</span><span lang="EN-US">.NET</span><span style="FONT-FAMILY: 宋体">运行库能检索到的异常信息。</span></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体">一般情况下,如果编写一个可执行程序,</span> <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">Microsoft</span><span style="FONT-FAMILY: 宋体">预定义的异常,而是抛出自己的异常对象,给客户机代码提供更特定的信息。</span></p>
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?