知识大全 在VB 2005中定制自己的异常

Posted 属性

篇首语:贪婪是最真实的贫穷,满足是最真实的财富。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 在VB 2005中定制自己的异常相关的知识,希望对你有一定的参考价值。

在VB 2005中定制自己的异常  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  提要本文在简要分析VB 所提供的异常处理机制的同时 详细讨论如何用它所提供的异常类定制自己的异常   结构化异常处理是随的第一个版本的发行而加入到Visual Basic语言中的 结构化异常处理的重要性基于下面两个原因    与以前的On Error Goto 语句相比而言 通过使用一种与该语言其它部分更适应的语法从而使得代码更具有可读性    比以前的On Error Goto 语句功能更强 而且提供了更为灵活性的控制能力   一 捕获并抛出异常  异常处理是用Try Catch Finally End Try语句实现的 其基本语法形式如下

   Try 能够引发一个异常的代码Catch 处理异常的代码Finally 实现清理工作的代码(如关闭数据库连接 等等)End Try

  Try和End Try语句都是必需的 Catch和Finally语句可以共同使用于一个Try块中 但是至少使用其中之一 而且 可以使用多个Catch语句来处理不同类型的异常 如果你有多个Catch块 可以对它们加以排序 从最具体的异常类型到最粗略的异常类型

   Try  能够引发一个异常的代码Catch ex As ArgumentOutOfRangeException  有可能使用一个缺省值来处理一个无效参数以便使代码继续执行Catch ex As Exception  处理任何其它类型的异常 Finally  实现清理工作的代码(如关闭数据库连接 等等)End Try

  你也可以在你的代码中抛出异常 当你在代码中执行一些清理工作时 捕获并抛出异常是很有用的 这样以来 一个更高层级的过程可以捕获它 当你创建定制异常类型时 抛出异常也很有用   为了抛出一个异常 你可以编写如下形式的代码

   Throw New ArgumentOutOfRangeException

  ArgumentOutOfRangeException告诉Throw语句要抛出什么类型的异常 这个ArgumentOutOfRangeException类型仅是 NET框架所提供的众多的类型之一   二 传播异常  当一个异常出现于你的代码的某处时 你可以以三种方式传播它   ·什么也不做而让它自动地传播回调用栈(由系统自动处理)   ·捕获并再次抛出它 这可以允许你在Finally块中运行一些清理代码   ·捕获它 并使用InnerException属性在另一个异常中包装该异常 并且把这个新的异常抛回调用过程 这个InnerException属性可以让你维持原始的异常并在一个关系更为密切的异常中存放它的信息

  三 定制自己的异常  尽框架提供了许多标准异常 但你也可以创建 抛出和捕获你自己的定制异常 一般地 微软推荐你使用由 NET框架所提供的标准异常 然而 如果你的应用程序仅使用一个标准异常不能满足需要时 你可以创建一个定制异常   当你创建一个定制异常类型时 你就能控制所有的异常属性 你还可以把属性添加到你的定制异常类中 除了把关键数据嵌入到Message属性中外 这可以使你有另外一个地方来存储这些数据 而且 这可以使得检索关键数据非常简单而不必在Message属性外分析它们   四 定制异常示例  为了理解定制异常 让我们创建一个很简单的命令行应用程序来加以具体说明   该代码包含一个非常简单的仅含有一个表Customer的MS Access数据库 一点也不奇怪 这个Customer表包含一组顾客记录(具有CustomerID first name last name address details共四个字段) 该数据库的实际内容并不重要 但是 在你的定制异常中实现数据存取是一种非常合适的选择   对于本应用程序来说 我用VB Express IDE创建了一个新的控制台应用程序   五 DatabaseException基类  如果你想创建多个定制异常 那么为这些定制异常创建一个定制基类是个不错的主意 这个基类将继承自 NET框架所提供的System Exception类 它还包含三个构造器 它们几乎可以适用于所有你的定制异常 本文中示例应用程序的基类称作DatabaseException 其代码显示如下

   Public Class DatabaseExceptionInherits ExceptionPublic Sub New()End SubPublic Sub New(ByVal message As String) MyBase New(message)End SubPublic Sub New(ByVal message As String ByVal inner As Exception) MyBase New(message inner)End SubEnd Class

  这三个构造器都是System Exception类提供的标准的构造器 第一个允许你创建一个异常而不必使用任何参数 仅需要缺省的异常属性即可 第二个允许你指定一个消息串以用作你的异常的Message属性 最后 第三个构造器也允许你指定一个消息串 但是它允许你指定一个异常作为第二个参数 System Exception类有一个属性InnerException 当你捕获一个异常并想把它包装到一个关系更相近的异常的内部时 这个属性很有用 通过设置InnerException属性 你可以维持在原始异常中的所有信息   有关基类最后一点要注意的是 在从System Exception类继承还是从System ApplicationExeption类继承的问题上开发者们的意见并不一致 大多数的微软老用户认为你应该从System ApplicationException继承 但是也有一些开发者认为应该从System Exception类继承 我也不确定是否它们之间存在什么技术差距 但是 我对这两种情况均作过测试 它们都能够正常工作 对于本文示例应用程序 我们使用了后面的思想 从System Exception类中继承

  六 定制异常 CustomerNotFoundException  第一个定制异常类是CustomerNotFoundException 当你试图在你的数据库中查找一个客户但未找到相应的匹配时你会抛出这个异常 实现代码如下所示

   Public Class CustomerNotFoundExceptionInherits DatabaseExceptionPrivate m_CustomerID As LongPublic ReadOnly Property CustomerID() As LongGet Return m_CustomerIDEnd GetEnd PropertyPublic Sub New(ByVal customerID As Long) MyBase New( Customer ID was not found ) m_CustomerID = customerIDEnd SubEnd Class

  这个类继承自你前面所创建的DatabaseException基类 它仅包含一个构造器 其参数为customerID 当调用这个构造器时 你把文本串 Customer ID was not found 传递到基类的构造器以用作Message属性 你还有一个已定义的只读属性CustomerID 你将使用这个CustomerID属性来存储要被作为一个参数传递的CustomerID的值 它是一个只读属性 因为把这个值改变为除了引发异常的值以外的值并没有什么意义

cha138/Article/program/ASP/201311/21799

相关参考

知识大全 定制VB.NET控件编程之拦截击键动作

定制VB.NET控件编程之拦截击键动作  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  一简介  

知识大全 VB 2005中开发新一代控制台应用程序

VB2005中开发新一代控制台应用程序  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!.NET编程免

知识大全 VB.NET 2005编写定时关机程序

VB.NET2005编写定时关机程序  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  最近在网上搜

知识大全 用VB.NET 2005编写定时关机程序[3]

用VB.NET2005编写定时关机程序[3]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  双击

知识大全 用VB.NET 2005编写定时关机程序[2]

用VB.NET2005编写定时关机程序[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  双击

知识大全 用VB.NET 2005编写定时关机程序[1]

用VB.NET2005编写定时关机程序[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!&nbs

知识大全 用VB.NET 2005编写定时关机程序[4]

用VB.NET2005编写定时关机程序[4]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!&nbs

知识大全 如何在程序中使用自己的库单元

  用过VB的人都知道可以在工程中增加类模快来存放共用方法而在delphi中如何也能与VB一样存放自己的类呢?通过下面的讲解我想你一定会有所收获的  一在工程中增加一个库单元  单击菜单的顺序为Fil

知识大全 VB动态调用自己的ActiveX DLL

VB动态调用自己的ActiveXDLL  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &

知识大全 用VB设计自己的E-mail系统

用VB设计自己的E-mail系统  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  VisualBa