深谈VB.NET结构化异常处理执行标准 

  对于VB.NET语言来说,在实际编程中有一个非常重要的操作值得我们去注意,那就关于异常方面的处理。今天我们就可以通过VB.NET结构化异常处理的相关介绍,来仔细的分析一下异常方面的作用及应用方法。

  概述

  相较于VB语言来说,VB.NET引入了许多特色。其中最值得注意的变化就是引入了VB.NET结构化异常处理。虽然VB.NET仍然支持On Error Goto类型的异常处理,但是这样做并不是很好。我们应该充分利用VB.NET提供的结构化异常处理。

  本文将结合VB.NET结构化异常处理的基础内容,并看一些在我们的应用程序中使用异常处理的例子。

  合适的错误处理很重要

  任何应用程序都需要一个恰当的异常处理。但是,由于严格的开发时间限制,责任共同承担,和相冲突的优先级,开发人员常常忽视了组织有序、考虑周到的异常处理的重要性。这常常导致用户的不便和失败,最后不得不增加大量的代码重写工作。

  结构化异常处理

  VB.NET采用了.NET框架结构的错误报告的标准机制,也就是所谓的结构化异常处理;它根据异常来报告医用程序中出现的错误。异常也就是一些能够捕捉到错误信息的类。为了恰当的使用.NET的异常处理机制,开发人员需要编写巧妙的代码来密切观察异常,同时也要编写执行代码来处理这些异常。

  VB.NET结构化异常处理在代码中提供如下部分:

Try 段:可以产生一个异常,并且总是能够被执行到的代码段

  Catch段:试图对一个异常做出处理,当异常发生时就会被执行的代码段

  Finally段:进行一些清理工作,并且总能被执行到的代码段

  异常类

  .NET中的每一个异常类都是由System.Exception类派生的。异常类中使用最频繁的成员如下:

  消息:描述一个错误的具体信息

  源:引起这个异常的对象或应用程序名

  目标:处理异常的方法

Try...Catch区块

Try...Catch区块的目的是允许捕捉错误并为其指定一个具体的VB.NET结构化异常处理解决方法。代码看起来就像下面这样:

Try '被执行的代码 Catch '错误解决代码 Catch 结束

  用Try段来写那些要被执行到的代码,而用Catch段来捕捉当执行Try段代码时可能产生的错误,并做出相应的反应。在Try段中出现的保护代码总会被执行到;但是,Catch段的代码只有当错误发生时才会被执行。代码的Try段总会被执行。

Try...Catch...Finally区块

  使用Try...Catch...Finally区块的目的是允许执行Try段中被保护的代码,对Catch区块中可能的任何错误做出反应,并且在随后的Finally区块中还有清理代码。无论Try代码区块是否有错误发生,Finally区块中的代码都会被执行到。这样可以很方便的保证分配的资源会被释放,并且可以方便地提供那些不论错误控制细节如何,都要需要被执行的各种功能的函数。代码例子如下:

Try '执行代码 Catch '错误解决代码 Finally '清理代码 Catch 结束 

 捕捉所有的异常和异常的具体类

  VB.NET结构化异常处理是很灵活的,它允许捕捉一个具体类型的异常或者是任何类型的异常,这完全取决于我们怎么去使用它。

  例子:捕捉任何可能发生的异常

Try Dim i As Integer = 0  Dim iresult As Integer iresult = 1 / i 

  把 ex 作为异常捕获

  MessageBox.Show(ex.ToString()) Finally MessageBox.Show("finally区块被执行")  Try      结束 

  这是怎么运行的

  在上面的VB.NET结构化异常处理代码例子中,我们故意设立了一个运行错误,以此来证明可以捕捉到任何的异常。我们捕捉到发生的任何错误,对它做出反应,而不管错误的类型是什么。错误发生在Try代码块中,所以当异常产生时就接着执行Catch代码块,然后是Finally代码块。我们通过声明一个异常类型的变量ex来捕捉这个异常。

  例子:捕捉一个特定类型的异常

Try Dim i As Integer = 0

Dim iresult As Integer iresult = 1 / i

  把 ex 作为溢出类型的异常捕获

  MessageBox.Show(ex.ToString())  Finally MessageBox.Show("finally区块被执行")  Try     结束 

  这是怎么运行的

  第二个代码例子引起了同样的错误,因为它试图执行一个以0为除数的除法,这样会引起溢出。但是,在这个例子中,我们仅仅有兴趣捕捉这种类型的异常,所以把ex变量的类型具体定义为OverflowException类型。运行第二个例子的代码结果和运行第一个例子一样,因为在两个例子中都捕捉到同样的错误;但是,第二个例子不能捕捉到其它类型的异常(非溢出类型的异常)。但是像以前一样,不论是否捕捉到异常,Finally区块中的代码都会被执行到。

  结论

  VB.NET结构化异常处理提供了很好的灵活性,应该合理地加以利用。一般来说,在我们开发应用程序时,错误控制不应该是最后才考虑的问题。反而,我们更应该注意建立好框架,在这个框架下建立每一个功能,这样才能向用户提供稳定可靠的应用程序。在我们的应用程序中应该小心地运用异常控制。 

转载于:https://www.cnblogs.com/st2012/archive/2012/04/06/2435413.html

什么是VB.NET的结构化异常处理相关推荐

  1. Win32 结构化异常处理(SEH)探秘【下篇】

    图十三 UnHandledExceptionFilter 函数的伪代码 UnhandledExceptionFilter( STRUCT _EXCEPTION_POINTERS *pException ...

  2. 异常处理第三讲,SEH(结构化异常处理),异常展开问题

    异常处理第三讲,SEH(结构化异常处理),异常展开问题 作者:IBinary 出处:http://www.cnblogs.com/iBinary/ 版权所有,欢迎保留原文链接进行转载:) 不知道昨天有 ...

  3. Windows系统程序设计之结构化异常处理

    标 题: [原创]Windows系统程序设计之结构化异常处理 作 者: 北极星2003 时 间: 2006-09-20,20:21:28 链 接: http://bbs.pediy.com/showt ...

  4. windows核心编程学习笔记(八)结构化异常处理(Structured Exception Handling)

    首先要要知道,结构化异常处理(SEH)和C++提供的异常处理不相同. 一.Termination HandlersTermination Handlers使用很简单.在想使用SEH处理的地方使用 __ ...

  5. Windows内存管理(3)--检查内存可用性,结构化异常处理 和 ASSERT

    1.      检查内存可用性 在驱动程序开发中,对内存的操作要格外小心.如果某段内存是只读的,而驱动程序试图去写操作,会导致系统的崩溃. DDK提供了两个函数,帮助程序员在不知道某段内存是否可读写的 ...

  6. 深入探索Win32结构化异常处理

    原文:http://blog.csdn.net/diamont/article/details/4259590 Matt Pietrek 著 董岩 译 在Win32操作系统提供的所有功能中,使用最广泛 ...

  7. Windows异常世界历险记(五)——VC6中结构化异常处理机制的反汇编分析(下)

    在本系列的上一篇文章Windows异常世界历险记(四)--VC6中结构化异常处理机制的反汇编分析(中)中,给出了针对VC6的异常处理机制进行逆向后得到的伪码.在本文中,我们仍然以之前写的小程序为例,通 ...

  8. 深入解析结构化异常处理(SEH) - by Matt Pietrek

    目录 1.浅析SEH 2.移向更深处 3.编译器层面的SEH 4.扩展的异常处理帧 5.ShowSEHFrames程序 6.展开 7.未处理异常 8.进入地狱 9.结论 ​尽管以前写过一篇SEH相关的 ...

  9. SEH(结构化异常处理)

    文章目录 内容回顾: 总结: 程序代码 实现截图 具体流程 内容回顾: 当用户异常产生后,内核函数KiDispatchException并不是像处理内核异常那样在0环直接处理,而是修正3环EIP为Ki ...

最新文章

  1. 解决tomcat控制台乱码问题
  2. find your place
  3. @angular/platform-browser-dynamic
  4. Linux系统编程26:进程间通信之进程间通信的基本概念
  5. 一、Rabbitmq安装与配置信息
  6. Linux Linux共享库
  7. Python + selenium之组织unittest单元测试用例
  8. C标准中的转义字符以及ASC码表
  9. C#判断PC是否支持触摸屏
  10. Linux的目录结构及对应目录下存放的内容
  11. 剑网3手游微信52服务器灵霄峡,剑网3指尖江湖灵霄峡宝箱位置详解攻略
  12. QT 实现百万级的数据显示内存消耗几十兆
  13. jvm优化_在JVM中记录世界停顿
  14. 51单片机c语言直流电机廷迟启停,51单片机控制直流电机不会加定时器延时程序...
  15. hdu 6656 2019杭电多校第7场 期望题
  16. 安全普及:关于网络远程控制和木马的几点误区
  17. 【渝粤教育】 国家开放大学2020年春季 1326社区护理学(本) 参考试题
  18. CoffeeScript入门
  19. C#自动编号,要求编号连续不间断
  20. 树莓派+android+盒子,用树莓派做电视盒子,安装Android TV系统

热门文章

  1. Redis与Memocache的区别
  2. 使用html元素的getBoundingClientRect来获取dom元素的时时位置和大小
  3. (从零开始java开发) IDEA+MAVEN构建一个webapp骨架项目(解决一直downloading问题)...
  4. C++异常(exception)第一篇--综合讲解
  5. Clojure的学习笔记(二)
  6. (转)几种常用存储过程分页方法
  7. 理解图像的傅里叶变换
  8. C#操作Access数据库
  9. IOS基础之使用UICollectionView纯代码创建
  10. layui table工具栏点击时间_layui table表格上添加日期控件laydate