当前位置:首页
开发技术指南» 文章正文
    引言:

    摘要: 在winform开发中如何把datagrid里面的数据导出成excel文件!!!在线等啊!!! ......
 ·从此不种仙人掌    »显示摘要«
    摘要: 我的小仙人掌最后还是烂掉了。 继我的大仙人掌烂掉2周年以后,我的小仙人掌也逃不开这个命运。 为什么呢?也曾经勤快的给它浇水,为了弥补肥料的短缺,把茶叶什么的给它也喝一点,为了让它看起来不这么讨人厌,一根一根的手工拔掉它的小刺。还曾经用充满爱惜的眼光注视它,默默在心里说着希望你快点长大的话。没想到一夜之间,它就香消玉殒了,只剩这一盆黄土,留给我无尽的内疚和悔恨。 如果给一个懂它的养着,便不是......


谁帮我解答一下Dispose、SuppressFinalize、析构函数的概念,联系,区别,执行顺序等等,反正我是挺乱,希望大家帮我理理

谁帮我解答一下Dispose、SuppressFinalize、析构函数的概念,联系,区别,执行顺序等等,反正我是挺乱,希望大家帮我理理,顶者有分

NO.1   作者: lovvver

我也挺乱的,帮你顶顶吧

NO.2   作者: JzeroBiao

Dispose  
  对象不同,Dispose方法也不太一样.  
   
  SuppressFinalize  
  请求系统不要调用指定对象的完成器方法。  
   
  析构函数是自动调用的,它不能被显式调用。当任何代码都不再可能使用一个实例时,该实例就符合被销毁的条件。此后,它所对应的实例析构函数随时均可能被调用。销毁一个实例时,按照从派生程度最大到派生程度最小的顺序,调用该实例的继承链中的各个析构函数。析构函数可以在任何线程上执行

NO.3   作者: xiao_p

咔咔  
  还是不明白!!~~

NO.4   作者: bflovesnow

1)Finalize   方法的主要用途是确保在对象释放内存时同时清理谇对象所占有的非托管资源。  
  2)在封装了非托管类型,如文件、网络连接、数据库连接等,就必须重写   Finalize   方法,以便让   CLR   在垃圾回收时可以回收这些对象所占有的非托管资源。  
  3)Finalize   是私有方法,它只有在CLR进行垃圾回收时被   CLR   调用,在程序中无法显式调用   Finalize   方法。  
  4)Dispose   是   CLR   提供给开发人员显式释放对象所占有的非托管资源和关闭对象的方法,因为开发人员知道何时不再使用该对象,但并不能释放托管堆中的内存,释放托管堆中的内存仍有CLR在负责。  
  5)SuppressFinalize   是告诉   CLR   先不要释放该对象,以免影响它引用了它的对象发生异常  
  6)一般要析构函数里自动生成调用   Finalize   方法的调用。  
   
   
  以上是个人的理解,请指正!

NO.5   作者: Roaming_Sheep

我现在有一点不明白,那就是为什么有的类偏要实现IDispose接口并实现Dispose的方法,并把释放非托管资源的代码写在里面,然后显式的调用。  
  我这么办不行吗:  
  在类里面写一个共有的方法叫MyMethod,这里面写些释放的代码,因为我自己知道什么时候这个类的实例将不再使用,所以我可以在使用完毕的时候调用MyMethod,然后就不管了,反正非托管的资源我已经释放了,剩下的就是垃圾回收器做的事情了。  
  ————————————————————————————————————————  
  别人使用这些类的时候,难免会感到困惑、不适  
   
   
   
  还有呀,我觉得   bflovesnow()   说的很有道理,那么这么做不行吗:  
  我不实现Dispose方法,把所有的非托管资源的释放的代码都写在Finalize的里面,然后就不管了,因为反正垃圾回收器在释放托管资源的同时会调用Finalize方法,也就会释放非托管资源了。  
  ————————————————————————————————————————  
  什么时候进行垃圾回收是你不能控制的  
  而很多时候你需要在一个确切的时间就释放掉非托管资源,这样就不能依赖于finalize了,因为你根本不知道什么时候finalize才会被调用

NO.6   作者: symboltome

看得我都有点乱了 :)

NO.7   作者: fengyunleo

晕了

NO.8   作者: xfxf521

这应该就像一个规定样的,你用别人做好的框架,自然要遵守别人定的规矩~~

NO.9   作者: Ivony

第一个问题,你把实现模型里面第一条和第五条结合起来看就可以知道这样做的好处了。  
   
  1、因为你的类会被谁调用是并不可知的。大家都遵循这个规则便可以保证资源一定被释放。  
   
  2、实现了IDispose,结合using语句可以让程序更具可读性。如果上面你的程序中在MyClass   MC=new   MyClass();和MC.Dispose();之间还有别的代码,就应该使用using块保证Dispose一定会被执行,不用using,也应当使用try...finally结构来保证Dispose一定会被执行。  
   
   
  IDispose是一种规则,就像public等修饰符一样,你可以让所有的东西都public而不要private,这是没问题的,如果程序都是你写的话。但是如果你想要与别人协作的话,就应该遵守这些规则。  
   
   
  第二个问题,C#会根据析构函数自动生成Finalize方法。永远不要在析构函数或者Finalize方法中抛出异常,这会导致严重的后果。


    摘要: type curs is ref cursor;动态游标 cu3 curs; open cu3 for select code_segment_start,code_segment_length,code_zone_id from zc.t_gx_rule_detail where field_id=||v_field_id; loop fetch cu3 into v_code_segm......
» 本期热门文章:

©2000-2007 All Rights Reserved. 最佳浏览:1024X768 MSIE