VB.NET如何使用On Error语句

技术VB.NET如何使用On Error语句这篇文章主要介绍VB.NET如何使用On Error语句,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!VB.NET推荐使用Try...End Try块来

本文主要介绍VB.NET如何使用On Error语句。很详细,有一定的参考价值。感兴趣的朋友一定要看完!

VB。NET建议使用“尝试”.End Try块用于结构化异常处理,但为了保证兼容性,还借用了VB。NET的on错误语句。其实,On Error并不能算是VB的优势,因为使用它会破坏程序的结构,让有异常处理的程序很难理解和调试。但是我一直很惊讶VB工程师是怎么实现的,因为On Error可以像Try一样让异常跳转变得灵活,不受限制。首先看看Try是如何实现的:

publifunction f1()as integer trydimnasinteger=2 \ ncatchexaxexceptionmsgbox(例如。message) end try end函数这是最简单的异常处理程序。通过Reflector进行反汇编(如果使用ILDasm,不要选择“try-catch”),可以发现整个过程已经被翻译成19条指令。注意这句话:tryl _ 0000 tol _ 0006 catchee exception _ 0006 tol _ 0022这是一个典型的试块。指定要在catch处直接捕获的异常,然后指定catch区域的位置,这非常清楚。注意这两句话:

L _ 00073360 callprojectdata。set projecterror _ 001 b : call projectdata。clearprojecterror,我们可以看到这两个句子在catch块的开头和结尾。深入这两个过程,我发现它记录了Err对象的异常。看来用Err也是一种甜的语法,一种苦的表现,这两句是凭空加的(好在不太复杂)。

接下来,我编写了一个类似于这个函数的函数,使用On语句来处理异常:

public function F2()as integeronegrootatchlocktomtinnasinteger=2 \nexitf功Catchblock: msgbox (err。描述)结束功能这个并不比之前的流程复杂,但是拆解之后,它的IL代码其实有47条指令,刚才只有19条!主要变化是尝试部分,现在是这样的:tryl _ 0000 tol _ 0022 filter l _ 0022 l _ 0036 tol _ 0060请注意,捕获已消失,但过滤器出现。我从来没有在C#生成的IL中见过滤镜。我查询的Meta Data部分文档,filter大概可以做一些过滤,只有满足一定的条件才能进入异常处理块。在本例中,L_0022指令一开始是一个过滤器,它是:

l _ 0022: isinstexceptionl _ 0027: br false . sl _ 00333 l _ 00293360 dloc . SV _ 4L _ 002 b : br false . sl _ 00333 l _ 002d : dloc . 3l _ 002 e : br true . sl _ 00333 l _ 0030333 6 LDC . 1l _ 0004SL _ 0034 l _ 00: LDC . I 4.0 l _ 00343360 end filter是代码异常处理部分的开头。而L0030之前的代码是过滤器的判断部分,V_4和V_3是VB自己添加的变量,保存错误码。在整个反汇编中,我发现设计用来处理异常的代码实际上在IL中的try块中,也就是说程序的结构不再是常规的try.catch块,生成异常的语句与处理异常的语句放在一起,而实际处理异常的指令是很多繁琐的跳转语句。

让我们看看我写的第三个例子:

public function F3()as integererrorresumentextdimnasinteger=2 \ n函数该值有2行,使用了VB强大的语法杀手——On Error Resume Next。它将忽略所有异常,并让代码继续在生成异常的语句旁边执行。猜猜这个函数产生了多少个IL指令?答案是50!它比普通的On Error长。它的实现我就不多说了,和前面的on语句差不多。然而,数字50似乎提醒大家不要懒于使用On Error来处理程序中的异常,因为代价是不可接受的。

* * *一个例子是VB。NET的When语句,可以过滤Catch部分:

public function f1()asintegerdimnasInteger=0 trydimasininteger=2 \ nCThexaxexceptionwhen=0 msgbox(例如。message) end try end函数中,when语句判断了变量N,并且只在n=0时才进入处理部分。听到“过滤器”这个词后,我们已经猜到它是通过尝试来实现的.过滤器。没错。这里的过滤器主要处理ex是否为Exception类型,n是否等于零等。过滤成功后,会转到异常处理部分进行处理。这次VB生成的代码比VB规则多了。NET的on error语句,其结构相当清晰。

以上就是《如何在VB中使用On Error语句》一文的全部内容。NET”。感谢您的阅读!希望分享的内容对大家有所帮助。更多相关知识,请关注行业资讯频道!

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/130825.html

(0)

相关推荐

  • redis位图可以有过期时间吗(redis中的位图)

    技术redis中的位图是什么意思这篇文章将为大家详细讲解有关redis中的位图是什么意思,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。位图位图,即大量bit组成的一个数据结构(每个bi

    攻略 2021年12月16日
  • Hibernate查询语句有哪些

    技术Hibernate查询语句有哪些小编给大家分享一下Hibernate查询语句有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1. se

    攻略 2021年12月8日
  • 酵母粉是什么,干酵母粉的主要成分是什么

    技术酵母粉是什么,干酵母粉的主要成分是什么干酵母粉的主要成分是B族维生素酵母粉是什么、及叶酸、肌醇、转化酶、麦芽糖酶等。干酵母又称酵母,为麦酒酵母或葡萄汁酵母的干燥菌体。其富含的B族维生素是体内酶系统的重要组成物质,及叶

    生活 2021年10月25日
  • 手机闹钟怎么设置闹铃,苹果手机闹铃声音在哪里设置

    技术手机闹钟怎么设置闹铃,苹果手机闹铃声音在哪里设置苹果手机闹铃声音的设置方法:打开苹果手机时钟,点击“加号”,滑动数字设置闹钟时间,打开“重复”,勾选一周里要使用闹钟的日期,点击“返回”;选择“铃声”,找到喜欢的铃声并

    生活 2021年10月29日
  • 兄弟造句两种意思造句,一个词语有两个意思,造句

    技术兄弟造句两种意思造句,一个词语有两个意思,造句一兄弟造句两种意思造句、手腕  1、手和臂连接的部分。
    举例:那用圆润的手腕,遮着太阳,一对黑大的眼睛,向我注视的,不是S是谁?
    2、手段,伎俩。
    举例:他作梦也想

    生活 2021年10月25日
  • 关于ccoosCreator里的物理系统

    技术关于ccoosCreator里的物理系统 关于ccoosCreator里的物理系统按理说,可以说有两个碰撞系统的
    一个是设置collision碰撞组件进行碰撞
    另一个是 设置物理引擎 getPhys

    礼包 2021年11月9日