A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© pm324 中级黑马   /  2013-8-21 10:53  /  3582 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 pm324 于 2013-8-21 23:02 编辑

如题,经常会用到using还有catch try finally这两个代码段。但是他们具体的区别到底在哪里?
烦请各位不吝赐教

3 个回复

倒序浏览
try catch语法:

try

{

// 事务处理

}

catch

{

//错误捕获及处理

}

using语法:

using (.../*资源初始化*/)

{

//事务处理.

//事务处理结束后释放资源

}

try catch可以捕获异常及处理异常;using的作用仅仅是资源的管理释放,如果using中发生异常也不会影响资源释放的过程,但是异常还是会被抛出。所以,如果需要对异常进行拦截捕获那就一定用try catch;如果要对调用资源进行及时释放,那就要用using。

评分

参与人数 1技术分 +1 收起 理由
赵宗荣 + 1

查看全部评分

回复 使用道具 举报 1 0
using可以声明namespace的引入,还可以实现非托管资源的释放,实现了IDisposiable的类在using中创建,using结束后会自动调用该对象的Dispose方法,释放资源。using其实等价于try......finally,用起来更方便。
回复 使用道具 举报
感谢楼上两位同学的精彩回答!{:soso_e142:}
我呢,自己也查找了些资料,关于using 和try catch finally的区别,我对楼上两位同学做以简单的补充,如有不对的地方还请大家帮我改正

在C#和其他托管语言中,没有自动、决定性的析构方式,而是有一个垃圾收集器,它会在未来的某个时刻释放资源。它是非决定性的,因为我们不能确定这个过程在什么时候发生。忘记关闭数据库连接可能会导致.NET可执行程序的各种问题。我们使用using子句确保实现IDisposable接口的对象在退出块时立即被释放。

try和catch是配对使用的,一般用来捕捉异常。

using 语句确保调用 Dispose,即使在调用对象上的方法时发生异常也是如此。通过将对象放入 try 块中,并在调用 finally 块中的 Dispose,可以获得相同的结果;

using会保证非托管的资源在离开using作用域的时候删除。

顺便说一下 Close()和Dispose()两个的不同:
C#中析构函数是有垃圾搜集器来调用的,当所引用的堆上的数据当无效时,会隐式调用。一般表现为当引用变量超出其作用域时就会调用。   
Close函数和Dispose函数则是一种约定。调用Close函数释放资源后可能还需要再次使用,而Dispose函数释放的资源不再使用。   
另外,如果类实现了IDisposable接口,实例化类时可以使用using关键字,则当超出using关键字作用域时会隐式调用Dispose函数 。

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马