比如FileStream这样的类问题1:
如果不调用它的Dispose方法,他所占用的非托管资源最后会被释放吗?问题2:
是不是.NET里面所有的类,对非托管资源都实现了Dispose问题3:
什么时候需要自己写Dispose方法,

解决方案 »

  1.   

    1, 简单的说,不调用程序关闭才释放
    2, .net 自带的都有这些保障
    3, 如果类里使用了非托管资源就应该指定 dispose finalize
      

  2.   

    dispose是Component才有的,如果你自己定义的组件help:每次释放对 Component 的最后一个引用前,均应调用 Dispose。否则,在垃圾回收器调用 Component 对象的 Finalize 方法之前,正在使用的资源不会被释放。
      

  3.   

    FileStream 打开了会获取文件的句柄,根据参数不同还可能独占阻止别的进程访问,如果不在 Dispose 或 Finalize 里指定,只有等到程序结束才会释放了,这样轻则占用个句柄,重则影响别的程序。
    当你的类里创建全局性的非托管资源,例如封装窗口、文件和网络连接、数据库连接,或者其他 API 要求调用函数释来放的东西,这样就应该继承 IDispose 接口,在 Dispose 里加上释放的代码,最好还应该加上 Finalize 函数。
      

  4.   

    看msdn或帮助,查 "实现 Dispose 方法"
      

  5.   

    对于所有Stream的派生类(FileStream也是),请不要直接调用Dispose,使用Close方法关闭流,关闭的同时它会自动释放资源,这也是为了流的写入缓存能够在刷新后再释放。“dispose是Component才有的,如果你自己定义的组件”
    不对,dispose是任何类都可以有的,任何情况下都可以实现IDispose接口,而不局限于非托管资源的释放,比如我想在这个类被丢弃不用的时候,将状态存入文件,就可以继承IDispose接口,实现Dispose操作来处理状态写入文件的操作,Dispose不单单用来释放内存,它是对象被释放时调用的一个函数,只要类继承IDispose接口,在其释放的时候必定执行Dispose方法,那么我们就可以利用这点处理自己想处理的一些代码了。
      

  6.   


    详细点 看MSDN 最直白