很早前写过这么一篇文章:.NET中IDisposable接口的基本使用,地址:http://www.cnblogs.com/carysun/archive/2008/06/15/Dispose.html
本文作为前面文章的一个补充,看下面代码:
using System; class A { public A() { Console.WriteLine("构造函数A"); } ~A() { Console.WriteLine("析构函数A"); } } class B : A { public B() { Console.WriteLine("构造函数B"); } ~B() { Console.WriteLine("析构函数B"); } } class C : B { public C() { Console.WriteLine("析构构造函数C"); } ~C() { Console.WriteLine("析构函数C"); } } class App { public static void Main() { C c = new C(); Console.WriteLine("对象创建 "); Console.WriteLine("销毁对象"); Console.ReadLine(); c = null; // GC.Collect(); Console.Read(); } }
执行结果如下:
构造函数 A
构造函数 B
构造函数 C
对象创建
销毁对象
析构函数 C
析构函数 B
析构函数 A
请按任意键继续. . .
当我们输入回车,将c设为null后,析构函数并没有执行
Console.WriteLine("销毁对象");
Console.ReadLine();
c = null;
我们再次回车让程序结束后析构函数执行了,这是因为析构函数的执行是.NET的垃圾回收器来控制的,如果我们想立即销毁的话有两种方式:
1.调用:GC.Collect();
2.实现IDisposable
接口的Dispose方法,具体实现请参考此文:.NET中IDisposable接口的基本使用,地址:http://www.cnblogs.com/carysun/archive/2008/06/15/Dispose.html
作者:生鱼片
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
分类:
DotNet
标签:
destructors
, IDisposable
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
2008-11-07 动态更新活动条件