黑马程序员技术交流社区

标题: C#中哪些类需要using()? [打印本页]

作者: 凤凰涅槃    时间: 2013-11-2 09:08
标题: C#中哪些类需要using()?
本帖最后由 凤凰涅槃 于 2013-11-2 15:57 编辑

c#中哪些类在使用的时候需要using()啊,看视频的时候,杨中科老师说只要实现了IDisposible接口的都要使用using(),
各位大侠能不能推荐几篇相关文章,让我看看,这里不是十分理解,还有就是有没有什么简单的方法判断一下哪些类
需要使用using(),不然我每次使用的时候都得转到定义看看它有没有实现IDisposible接口,好像有点麻烦吧。。。。。
这里先谢谢大家了。。。。。。

作者: haxyek    时间: 2013-11-2 10:05
涉及到内存,资源这一类的,用完需要释放。
作者: 360安全卫士    时间: 2013-11-2 10:26
using中声明的对象,在using语句块结束后会自动释放。
比如连接资源SqlConnection,在使用后,需要释放的,有时候会忘记手动释放,虽然.Net的垃圾处理机制会做处理,但是那不可控制,用using(SqlConnection conn = new SqlConnection())
{
...
}
以后,但using的语句块执行完毕,conn会自动释放。
作者: 追溯客    时间: 2013-11-2 10:43
简单来说,当你需要引用到哪个方法是,就要申明一下
作者: 追溯客    时间: 2013-11-2 10:44
如果问题得到解决,请及时将分类设为"已解决",这样各位版主才方便给你加分哦!
作者: 凤凰涅槃    时间: 2013-11-2 11:57
haxyek 发表于 2013-11-2 10:05
涉及到内存,资源这一类的,用完需要释放。

有没有相关文章,推荐几篇看看,谢谢
作者: 凤凰涅槃    时间: 2013-11-2 12:01
追溯客 发表于 2013-11-2 10:43
简单来说,当你需要引用到哪个方法是,就要申明一下

能不能稍微深入点,谢谢了,这个问题困扰我好长时间了,之前都是知其然不知其所以然。。。。。。
作者: 蒋东东    时间: 2013-11-2 12:26
凡是实现了IDisposable接口的类都要使用using?我认为视情况而定吧。
C#通过.NET Framework公共语言运行库(CLR)来自动释放用来存储不再需要的对象的内存。内存的释放具有不确定性;一旦CLR决定执行垃圾回收,就会释放内存。但是,通常最好尽快释放诸如文件句柄和网络连接这样的有限资源。using 语句允许程序员指定使用资源的对象应当何时释放资源。为using语句提供的对象必须实现IDisposable接口。此接口提供了Dispose方法,该方法将释放此对象的资源。
也就是说,.Net垃圾回收机制会处理一切需要释放内存的对象。但是,由于有些资源比较珍贵,或者说有些资源不立即释放会影响程序性能甚至发生未知错误,所以需要程序员去控制。而using就可以帮助程序员方便处理这个问题,因为using会自动调用对象的Dispose()方法。
  1. <p>using(A a = new A())</p><p>{</p><p>    //使用a对象代码</p><p>}</p><p>//using结束后自动调用a.Dispose()
  2. </p><p> </p>
复制代码

作者: §風過無痕§    时间: 2013-11-2 14:28
GC的工作范围是托管资源!  而那些非托管资源且为有限的珍贵的资源就需要程序员编写方法进行释放  

  最初用到的是try。。。catch。。。 finally   把释放资源的语句写在finally内   以try.....catch......finally的性质而知   最后一定会执行 finally语句 进行资源释放
   
    但是呐!为了出于避免忘记写finally语句 而导致稀有资源浪费 后来出现了using语句
    前提 这些珍贵资源都实现了IDisposable 接口
using语句:
           using 语句确保调用 IDisposable 接口中的Dispose方法,即使在调用对象上的方法时发生异常也是如此。  
           缺点是:对于异常的处理没有try.....catch......finally那样好! 将二者结合起来用是最好不过咯

作者: 凤凰涅槃    时间: 2013-11-2 15:55
蒋东东 发表于 2013-11-2 12:26
凡是实现了IDisposable接口的类都要使用using?我认为视情况而定吧。
C#通过.NET Framework公共语言运行库( ...

谢谢了,受教了。。。。。。
作者: 凤凰涅槃    时间: 2013-11-2 15:56
§風過無痕§ 发表于 2013-11-2 14:28
GC的工作范围是托管资源!  而那些非托管资源且为有限的珍贵的资源就需要程序员编写方法进行释放  

  最 ...

多谢了  受教了。。。。。。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2