本文主要介绍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