定制异常-机器人学导论第三版课后习题答案
13.2 定制异常
第7章讨论了异常,以及如何使用try...catch...finally
块处理它们。我们还论述了几个标准的.NET异常,包括异常的基类System.Exception
。在应用程序中,有时也可以从这个基类中派生自己的异常类,并使用它们,而不是使用标准的异常。这样就可以把更具体的信息发送给捕获该异常的代码,让处理异常的捕获代码更有针对性。可以给异常类添加一个新属性,以便访问某些底层信息,这样异常的接收代码就可以做出必要的改变,或者仅给出异常起因的更多信息。定义了异常类后,就可以使用“调试➪异常”(Debug ➪ Exceptions)对话框中的“添加”(Add)按钮,把它添加到VS可以识别的异常列表中,然后定义与异常相关的操作,如第7章所述。
在System名称空间中有两个基本的异常类ApplicationException
和SystemException
,它们派生于Exception
。SystemException
用作.NET Framework预定义的异常的基类,ApplicationException
由开发人员用于派生自己的异常类。但最近的最佳实践方式是不从这个类中派生异常,而应使用Exception
。ApplicationException
类在未来可能会被废弃。
那么,如何在CardLib项目中添加定制异常呢?这可以通过升级CardLib项目来说明。如果试图访问索引小于0或大于51的扑克牌,Deck.GetCard()
方法目前就会抛出一个标准的.NET异常,但我们可以改为使用一个定制异常。
需要在BegVCSharpChapter13目录中创建一个新的类库项目Ch13CardLib,像以前一样把类从Ch12CardLib中复制过来,并把名称空间改为Ch13CardLib。接着定义该异常。方法是使用在新类文件CardOutOfRangeException.cs
中定义的一个新类,这个新类是使用“项目➪添加类” (Project ➪ Add Class)添加到Ch13CardLib项目中的:
public class CardOutOfRangeException : Exception
{
private Cards deckContents;
public Cards DeckContents
{
get
{
return deckContents;
}
}
public CardOutOfRangeException(Cards sourceDeckContents)
: base("There are only 52 cards in the deck.")
{
deckContents = sourceDeckContents;
}
}
更多关于C#异常处理的内容,可以参考以下资源:C#异常含异常格式抛出异常和自定义异常、详谈.NET的异常处理、C#异常处理。这些链接提供了更详细的讲解,帮助你更好地理解和应用异常处理技术。