VB.Net用户定义异常的示例?

VB.Net用户定义异常的示例?,.net,vb.net,exception,exception-handling,.net,Vb.net,Exception,Exception Handling,简单地说,我想知道这里是否有人能给我一个VB.Net中用户定义异常的例子。我已经有两个例子,我可以在网上找到,但除此之外,我想不出更多。我需要找到至少5个来写笔记,然后交给我的老师 到目前为止,我掌握的两个信息是:无效的登录信息(如不正确的用户名或密码)和在线商店上过期的信用卡信息。任何帮助都将不胜感激。创建一个从类派生的新类。看这里: 基本要求是向项目中添加从内置类继承的新类。这几乎可以免费获得所需的一切,因为它都是在System.Exception类中实现的 您需要添加到类文件中的唯一内容是

简单地说,我想知道这里是否有人能给我一个VB.Net中用户定义异常的例子。我已经有两个例子,我可以在网上找到,但除此之外,我想不出更多。我需要找到至少5个来写笔记,然后交给我的老师


到目前为止,我掌握的两个信息是:无效的登录信息(如不正确的用户名或密码)和在线商店上过期的信用卡信息。任何帮助都将不胜感激。

创建一个从类派生的新类。看这里:


基本要求是向项目中添加从内置类继承的新类。这几乎可以免费获得所需的一切,因为它都是在
System.Exception
类中实现的

您需要添加到类文件中的唯一内容是构造函数(因为,记住,构造函数不是继承的)。虽然您不必定义所有三个标准构造函数,但我强烈建议您这样做,以便您的接口与.NET Framework提供的所有异常类保持一致。定义它们一次并不难,而且也不难

最后(这是大多数人忘记的步骤,包括那些发布了这个问题的其他答案的人),您需要使您的异常可序列化。为此,请向类声明中添加,并添加序列化机制内部使用的
受保护的
构造函数。该属性不是从
系统继承的。异常
,必须明确说明

既然你问得很好,下面是一个完整的例子,上面所有的都实现了:

''' <summary>
''' The exception that is thrown when DWM composition fails or is not
''' supported on a particular platform.
''' </summary>
<Serializable()> _
Public Class DwmException : Inherits System.Exception

    ''' <summary>
    ''' Initializes a new instance of the <see cref="DwmException"/> class.
    ''' </summary>
    Public Sub New()
        MyBase.New()
    End Sub

    ''' <summary>
    ''' Initializes a new instance of the <see cref="DwmException"/> class
    ''' with the specified error message.
    ''' </summary>
    ''' <param name="message">The message that describes the error.</param>
    Public Sub New(ByVal message As String)
        MyBase.New(message)
    End Sub

    ''' <summary>
    ''' Initializes a new instance of the <see cref="DwmException"/> class
    ''' with the specified error message and a reference to the inner
    ''' exception that is the cause of this exception.
    ''' </summary>
    ''' <param name="message">The message that describes the error.</param>
    ''' <param name="innerException">The exception that is the cause of the
    ''' current exception, or a null reference if no inner exception is
    ''' specified</param>
    Public Sub New(ByVal message As String, ByVal innerException As System.Exception)
        MyBase.New(message, innerException)
    End Sub

    ' Constructor required for serialization
    <SecuritySafeCritical()> _
    Protected Sub New(ByVal info As SerializationInfo, ByVal context As StreamingContext)
        MyBase.New(info, context)
    End Sub

End Class
“”
''当DWM合成失败或失败时引发的异常
''在特定平台上受支持。
''' 
_
公共类DWMEException:继承System.Exception
''' 
''初始化类的新实例。
''' 
公共分新()
MyBase.New()
端接头
''' 
''初始化类的新实例
带有指定错误消息的“”。
''' 
''描述错误的消息。
Public Sub New(ByVal消息作为字符串)
MyBase.New(消息)
端接头
''' 
''初始化类的新实例
'',带有指定的错误消息和对内部
''异常是导致此异常的原因。
''' 
''描述错误的消息。
''是导致
''当前异常,如果没有内部异常,则为空引用
“指定”
Public Sub New(ByVal消息作为字符串,ByVal innerException作为System.Exception)
MyBase.New(消息,innerException)
端接头
'序列化所需的构造函数
_
受保护的子新建(ByVal信息作为SerializationInfo,ByVal上下文作为StreamingContext)
MyBase.New(信息、上下文)
端接头
末级

啊,在发布上述内容后,我意识到我可能完全误解了你的问题。我(和其他答案)以为您在询问如何实现用户定义的异常类的示例。看起来你只是在问一些例子,你什么时候会在自己的项目中做这样的事情。。。这要复杂得多

大多数时候,你不想这样做。您应该抛出自定义异常的唯一时间是在编写可重用代码库(如
.DLL
文件)时,并且您希望客户端代码根据抛出的特定异常做出不同的反应。因此,在我的例子中,我从类库中抛出一个
DwmException
,因为当用户的计算机上没有启用DWM组合时,客户机应用程序可能希望捕获该异常并禁用一些奇特的UI功能。通常,我会抛出一个标准,但在这种情况下,我想让客户机能够区分他们可以处理的异常和他们不能或不应该处理的异常


在标准应用程序中,所有代码都是自包含的(即,当您不创建可重用的代码库时),您基本上不应该创建/抛出自定义异常。扔一个标准的。按照上述规则,如果您需要抛出自定义异常以影响客户端代码的反应,这将表明您正在应用程序内部使用异常进行“流控制”(因为生产者和消费者是同一个人),这是非常不鼓励的。

想象一下,您创建了一个类库来执行特定的任务,以及如何失败,例如,一个XML解析器可能遇到格式错误的文件,一个缺少转换率的货币转换器。请您解释一下为什么我们需要将异常序列化?它是从System.exception继承的,还是从SystemException继承的?文档中说SystemException“充当系统异常命名空间的基类”。@Ama除非您实际上是系统的一部分,否则它不应从SystemException派生。应用程序异常只是异常的子类。SystemException是HRESULT
COR_E_系统
的包装。不确定
HRESULT
COR_E_系统
是什么,但我知道这是专门用于系统相关异常的。然后,自然的后续问题是:System.AppliationException呢?它改变了什么吗?如果我没有开发任何超级花哨的东西(VSTO),是否有一些细微的细节我真的不应该担心。。。Catch ex as arithmetricexception
将捕获
arithmetricexception
以及从中继承的所有异常,例如
DivideByZeroException
。当想要处理特定的异常组时,这是非常有用的,我相信大多数情况下