关于finally的一些认知

简介:相信大家在开发中都能使用很好的处理异常,那么避免不了和try catch finally 接触,慢慢的发现了下面的几个问题,开发环境是vs2010 +reshaper,当你想使用代码块时,智能提示会提示try和tryf两种,那么这两种代码块有什么样的区别那,还有就是c#中的return是结束当前执行的方法,那么如果我们在使用try catch finally时,在try代码块和catch代码块中都return;一下,那么finally中的代码还会执行吗,如果执行的话,如果return 后面是调用一个方法,那么return后面的方法中的代码和finally中的代码那个先执行那,下面带着这两个问题,我们来弄两个小例子

1.第一个例子,来说明try ,tryf的区别

当我们键入try 回车时,vs会添加以下代码,

try
            {


            }
            catch (Exception)
            {
                
                throw;
            }

上面的这种方式,主要适用于处理托管资源的异常处理,不需要在finally中关闭连接等操作

当我们键入tryf 回车时,vs会添加以下代码

  try
            {


            }
            finally
            {
                
            }

那么这种异常处理,适用于哪种情况那,按说出现了finally应该是用来释放占用资源的处理吧,可这种方式,真的能释放资源吗,答案是否定的


我认为智能提示的作用是用来提高开发人员的额开发效率的,但是如果提示的代码块可能包含某些可能存在的错误的话,这种智能提示还是不要有的好,因此,我们也可以总结出,在c#的开发中如果我们要使用异常处理,有以下两种参考方式,

try
            {


            }
            catch (Exception)
            {
                
                throw;
            }

或者

try
            {


            }
            catch (Exception e)
            {


            }
            finally
            {


            }

前一种解决是托管资源的异常,后一种解决是非托管资源的异常,第一个?,就到这里吧,多说一句,之所以会出现上面的疑问,大家自己可以尝试着上面3种可能的异常处理多级嵌套试试,就知道为什么建议用后两种方式了

2.第二个例子

首先我们先来解决第一个疑问,

上代码



从上面2个图可知,try,catch中return了,finally中的代码执行了,第一个小疑问,解决,注意finally中是不允许出现return的,编译都通不过,

再多想一个问题,如果代码修改如下:


可以看出try,catch中的return对finally中的代码的执行时没有影响的,但是对后面的代码时起作用的

接下来,我们解决第二个小疑问

代码


从图中看出现执行了return 后的testvoid方法,后自行了finally中的代码,第二个问题解决

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值