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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 蒋东东 中级黑马   /  2013-11-1 00:57  /  1444 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 蒋东东 于 2013-11-1 18:58 编辑

只听过c++中有析构函数,c#中有析构函数的概念么?

评分

参与人数 1技术分 +1 收起 理由
追溯客 + 1 面向对象里面的吧?这是考试的一个点.

查看全部评分

4 个回复

正序浏览
C#有垃圾回收器
会不定时的清理,内存中无效的地址空间

评分

参与人数 1技术分 +1 收起 理由
追溯客 + 1

查看全部评分

回复 使用道具 举报
析构函数用于析构类的实例。
1.不能在结构中定义析构函数。 只能对类使用析构函数。
2.一个类只能有一个析构函数。
3.无法继承或重载析构函数。
4.无法调用析构函数。 它们是被自动调用的。
5.析构函数既没有修饰符,也没有参数。
如类 Car 的析构函数的声明:
  1. class Car
  2. {
  3.     ~Car()  // destructor
  4.     {
  5.         // cleanup statements...
  6.     }
  7. }
复制代码
该析构函数隐式地对对象的基类调用 Finalize。 这样,前面的析构函数代码被隐式地转换为以下代码:
  1. protected override void Finalize()
  2. {
  3.     try
  4.     {
  5.         // Cleanup statements...
  6.     }
  7.     finally
  8.     {
  9.         base.Finalize();
  10.     }
  11. }
复制代码
这意味着对继承链中的所有实例递归地调用 Finalize 方法(从派生程度最大的到派生程度最小的)。
程序员无法控制何时调用析构函数,因为这是由垃圾回收器决定的。 垃圾回收器检查是否存在应用程序不再使用的对象。 如果垃圾回收器认为某个对象符合析构,则调用析构函数(如果有)并回收用来存储此对象的内存。 程序退出时也会调用析构函数。
可以通过调用 Collect 强制进行垃圾回收,但大多数情况下应避免这样做,因为这样会导致性能问题。
总结:
多数情况下c#中用不到析构函数,但如果在class中启用了非托管性资源,那么建议在其析构函数中进行适当资源清理工作(此时结合Dispose模式会更好),这会使.Net的自动垃圾回收和手动处理协调配合起来。
凡具有析构函数的class,其被识别为垃圾后,垃圾回收机制不会简单的进行回收处理,而是会将其加入到终结队列,再由第三方线程(因与主线程不存在数据冲突,故彼此可异步执行,不至应垃圾回收线程误了主程序的事)执行。编写析构函数要注意重点在清理非托管性资源,且不可将垃圾复活。
网上论坛有很多详细介绍,可以多去看看{:soso_e100:}

评分

参与人数 1技术分 +1 收起 理由
追溯客 + 1 不用直接百度复制答案,可以自己看了适当总.

查看全部评分

回复 使用道具 举报 1 0
C#中也是有析构函数的,
只不过是很少会用到   ,
因为visual studio强大的回收机制会帮程序员及时处理和销毁不用的对象   
在一定程度上解放了程序员吧算是
回复 使用道具 举报
说到析构函数,那得先说构造函数了

都是类的成员
名字都要和类名一致

析构函数用于销毁类所创建的对象

评分

参与人数 1技术分 +1 收起 理由
追溯客 + 1

查看全部评分

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