编程VB.NET开发者

如何在Visual Basic中实现用户自定义异常处理(Custom Exceptions),以及在什么情况下这确实是必要的?

用 Hintsage AI 助手通过面试

回答。

在Visual Basic .NET中,可以创建自定义异常类型,以便更明确地指示应用程序中出现的特定错误。为此,需要从System.Exception(或其子类之一)继承新类,并根据需要添加新属性以传递额外信息。

自定义异常使代码更加可读和可维护,特别是当您需要针对特定业务场景进行特定处理时。

示例:

Public Class InvalidUserNameException Inherits ApplicationException Public Sub New(message As String) MyBase.New(message) End Sub End Class ' 使用: Sub ValidateUserName(userName As String) If userName = "" Then Throw New InvalidUserNameException("用户名不能为空") End If End Sub

陷阱问题。

问题: "可以通过Throw "错误"在Visual Basic中抛出字符串,并且它会被Try...Catch处理吗?"

回答: 不,不能这样做。Throw语句要求Exception类型的对象。尝试抛出字符串(Throw "err")会导致编译错误。始终需要创建异常类或其子类的新实例。

错误代码示例:

' 这将导致错误! Throw "错误!"

正确代码示例:

Throw New Exception("错误!")

由于不了解该主题的细微差别而导致的真实错误示例。


故事:

在一个大型项目中,一位开发人员通过Throw "不正确的数据!"抛出异常。这导致在生产环境中出现编译错误,因为代码没有通过静态检查。缺乏正确的异常处理使得发布延迟了一周——不得不寻找并重写代码中所有使用字符串的throw情况。


故事:

团队创建了自定义异常,但未添加带有InnerException参数的构造函数。在诊断复杂错误时,调用栈丢失了,因为无法“嵌套”原始异常。结果很难找到故障的最初原因。


故事:

在媒体应用程序中,自定义异常被使用得过于频繁且不当(例如,在每次数据输入不正确时)。结果系统性能下降——因为生成异常在操作上是昂贵的。在审核后,这些异常中的一部分被替换为普通条件检查。