2014 相信自己能做的更好

---------------------------------------------------------------------------------------------------------
Everything is possible    Nothing is Impossible     
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

关于try ...catch .. finally的使用

Posted on 2006-11-21 15:03  Arping.Net探索  阅读(1795)  评论(2编辑  收藏  举报
     大家都喜欢使用MS提供的try...catch...finally,这的确给C#开发者带来的福音,以往Delphi开发者,往往会在嵌套使用try ...finally..end,try..except ..end达到相同的效果。但在某些场合下使用确实是有差别的。我们来看一个例子:
     
Broker broker = new Broker();
try
{
    broker.Open();
    
//处理判断逻辑 

    
//end
    broker.BeginTrans();
    
//处理事务
    
    
//end
    broker.CommitTrans();
    
}

catch(Exception ex)
{
    broker.RollbackTrans();
    
throw ex;
}

finally
{
    broker.Close();
}
如果在判断逻辑中出现异常,显然在catch 中broker需要Roolback,这时候就有问题了,broker还没有启Trans怎么就回滚了呢。所以应改为如下
Broker broker = new Broker();
try
{
    broker.Open();
    
//处理判断逻辑 

    
//end
    try
    
{
        broker.BeginTrans();
        
//处理事务

        
//end
        broker.CommitTrans();

    }

    
catch(Exception ex)
    
{
        broker.RollbackTrans();
        
throw ex;
    }

}

finally
{
    broker.Close();
}

判断逻辑有异常被调用此方法的catch中处理,当然自己也可以catch异常。这个也等同于Delphi中的处理
try
   conn.open();
   //处理逻辑
   try
      conn.BeginTrans();
      //处理事务
      conn.CommitTrans();
   exception
      conn.RollBackTrans();
   end
finally
   conn.close();
end