如何使用结构化的异常处理在 Visual Basic 中。NET 或 Visual Basic 2005 年

文章翻译 文章翻译
文章编号: 315965 - 查看本文应用于的产品
展开全部 | 关闭全部

本文内容

概要

本文演示如何使用结构化的异常处理在 Visual Basic 中。NET 或 Visual Basic 2005 年。

要求

下表列出了推荐使用的硬件、 软件、 网络基础结构和所需的服务包:
  • Visual Basic。NET 或 Visual Basic 2005
本文假定您熟悉下列主题:
  • Visual Basic。NET 或 Visual Basic 2005
  • Microsoft Visual Studio。NET 或 Microsoft Visual Studio 2005 年

结构化的异常处理

Visual Basic。NET 或 Visual Basic 2005年提供了提供一个功能强大、 更具可读性的替代方案以"On Error Goto"错误处理,这是早期版本的 Microsoft Visual Basic 中的结构化的异常处理。结构化的异常处理是功能更强大,因为它使您可以将嵌套在其他的错误处理程序所在的同一过程中的错误处理程序。此外,结构化的异常处理使用了一类似于如果...其他...如果语句。这样,Visual Basic。NET 和 Visual Basic 2005年代码更易读和易于维护。

注意: Visual Basic。NET 或 Visual Basic 2005年保持向后兼容性的"On Error Goto"语法。您仍可以在 Visual Basic 中使用此语法。NET 或 Visual Basic 2005年代码。但是,不能将结构化的异常处理和On Error语句所在的同一过程中。编写新代码时,Microsoft 建议您使用结构化异常处理。

结构化的错误处理的基本语法如下所示:
Try
   'Code that may raise an error.
Catch
   'Code to handle the error.
Finally
   'Code to do any final clean up.
End Try
				
需要的尝试End Try语句。捕获最后的语句,则不需要但必须包含至少一个在您的代码中。您还可以指定多个Catch语句,以便每个Catch块处理一个特定的错误。

捕获异常

  1. 开始 Visual Studio。NET 或 Visual Studio 2005年。
  2. 在 Visual Basic 中创建一个新的控制台应用程序项目。NET 或 Visual Basic 2005 年。
  3. Sub Main过程中,添加以下代码:
    Dim a As Integer = 0
    Dim b As Integer = 0
    Dim c As Integer = 0
    
    Try
      a = b \ c
    Catch exc As Exception
      Console.WriteLine("A run-time error occurred")
    Finally
      Console.ReadLine()
    End Try
    					
  4. 调试菜单上单击开始运行该应用程序。代码试图零作为除数。这会导致除数为零的异常的非法操作。幸运的是, Catch块捕获该错误,并在控制台窗口显示以下错误消息:
    A run-time error has occurred
    						
  5. 关闭控制台窗口。

捕获多个异常

本部分介绍如何使用多个Catch语句处理不同的错误。
  1. 打开您在上一节中创建的控制台应用程序项目。
  2. Sub Main过程中,在下面的代码与上一节中复制代码替换:
    Dim a As Integer = 2147483647
    Dim b As Integer = 0
    Dim c As Integer = 0
    
    Try
      a += 1
    Catch exc As DivideByZeroException
      Console.WriteLine("Error: Divide by zero")
    Catch exc As OverflowException
      Console.WriteLine("Error: Overflow")
    Finally
      Console.ReadLine()
    End Try
    						
    此代码包含两个Catch块: 捕获以前除零错,其中一个,另一个用于捕获新的溢出错误。
  3. 调试菜单上单击开始运行该应用程序。控制台窗口会显示以下错误消息:
    Error: Overflow
    						
  4. 关闭控制台窗口。
  5. 因为您无法始终预见可能出现的每个错误,您可以添加捕获所有的意外的异常块。例如,添加下面的代码之前在Finally语句捕捉任何意外的错误,并显示相应的错误消息:
    Catch exc As Exception
    Console.WriteLine("Error: " & exc.Message)
    					
  6. 文件菜单上单击关闭解决方案

引发异常

结构化的异常处理程序使用捕获异常的Catch语句。结构化的异常处理也提供了一种方法引发异常。例如,它可用于您执行数据验证Set 属性过程,因为您可能希望如果违反了业务规则,将引发错误时引发异常。
  1. 开始 Visual Studio。NET 或 Visual Studio 2005年。
  2. 在 Visual Basic 中创建一个新的控制台应用程序项目。NET 或 Visual Basic 2005 年。
  3. 项目菜单上单击添加类
  4. 添加新项窗口中,键入 clsPerson.vb名称文本,,然后单击确定
  5. 添加下面的代码在公共类clsPerson...结束类语句:
    Private mintAge As Integer
    
    Public Property Age() As Integer
      Get
        Age = mintAge
      End Get
      Set(ByVal Value As Integer)
        If Value >= 0 Then
          mintAge = Value
        Else
          Throw New ArgumentException ("Age cannot be negative")
        End If
      End Set
    End Property
    						
    此代码创建一个年龄的属性。一个人不能有负的年龄,因为如果类的用户尝试将时间设置为小于零的数字,但它被产生错误。
  6. 在 Module1.vb 的Sub Main过程中,添加以下代码:
    Dim p As New clsPerson()
    
    Try
      p.Age = -1
    Catch exc As Exception
      Console.WriteLine(exc.Message)
    Finally
      Console.ReadLine()
    End Try
    					
  7. 调试菜单上单击开始运行该应用程序。控制台窗口会显示以下错误消息:
    Age cannot be negative
    						
  8. 关闭控制台窗口。

完整代码列表

捕获异常

Module Module1

  Sub Main()
    Dim a As Integer = 0
    Dim b As Integer = 0
    Dim c As Integer = 0

    Try
      a = b \ c
    Catch exc As Exception
      Console.WriteLine("A run-time error occurred")
    Finally
      Console.ReadLine()
    End Try

  End Sub

End Module
				

捕获多个异常

Module Module1

  Sub Main()
    Dim a As Integer = 2147483647
    Dim b As Integer = 0
    Dim c As Integer = 0

    Try
      a += 1
    Catch exc As DivideByZeroException
      Console.WriteLine("Error: Divide by zero")
    Catch exc As OverflowException
      Console.WriteLine("Error: Overflow")
    Catch exc As Exception
      Console.WriteLine("Error: " & exc.Message)
    Finally
      Console.ReadLine()
    End Try


  End Sub

End Module
				

引发异常

Module Module1

  Sub Main()
    Dim p As New clsPerson()

    Try
      p.Age = -1
    Catch exc As Exception
      Console.WriteLine(exc.Message)
    Finally
      Console.ReadLine()
    End Try
  End Sub

End Module

Public Class clsPerson

  Private mintAge As Integer

  Public Property Age() As Integer
    Get
      Age = mintAge
    End Get
    Set(ByVal Value As Integer)
      If Value >= 0 Then
        mintAge = Value
      Else
        Throw New ApplicationException("Age cannot be negative")
      End If
    End Set
  End Property

End Class
				

引用

有关详细信息,请参阅以下 Microsoft 网站以:
错误处理 vb.NET 的方法: 生活有例外 (文章Visual Basic 开发人员
http://msdn.microsoft.com/en-us/library/aa227603 (v=vs.60).aspx

如何捕捉异常
http://msdn.microsoft.com/en-us/library/ys1b32h3 (v=vs.80).aspx

如何引发异常
http://msdn.microsoft.com/en-us/library/z7w9ff54 (v=vs.80).aspx

属性

文章编号: 315965 - 最后修改: 2012年6月15日 - 修订: 2.0
这篇文章中的信息适用于:
  • Microsoft Visual Basic 2005
  • Microsoft Visual Basic .NET 2003 标准版
  • Microsoft Visual .NET 2002 标准版
关键字:?
kbvs2005swept kbvs2005applies kbhowtomaster kbmt KB315965 KbMtzh
机器翻译
注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。
点击这里察看该文章的英文版: 315965
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。

提供反馈

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com