C#析构函数与Dispose
有几种不同的操作方式
方式一:
namespace ConsoleApp1 { class Test { ~Test()// 析构函数 { Console.WriteLine("~Test()析构函数"); } } class Program { static void Main(string[] args) { Test f = new Test(); f = null; GC.Collect(); Console.WriteLine("读取按键中"); Console.Read(); Console.WriteLine("读取到按键"); Console.WriteLine("程序结束"); } } }
方式二:
class Test { ~Test()// 析构函数 { Console.WriteLine("~Test()析构函数"); } } class Program { static void Main(string[] args) { Test f = new Test(); //f = null; GC.Collect(); Console.WriteLine("读取按键中"); Console.Read(); Console.WriteLine("读取到按键"); Console.WriteLine("程序结束"); } }
方式三:
class Test:IDisposable { ~Test()// 析构函数 { Console.WriteLine("~Test()析构函数"); } public void Dispose() { Console.WriteLine("Dispose()"); GC.SuppressFinalize(this); //throw new NotImplementedException(); } } class Program { static void Main(string[] args) { using (Test f = new Test()) { } GC.Collect(); Console.WriteLine("读取按键中"); Console.Read(); Console.WriteLine("读取到按键"); Console.WriteLine("程序结束"); } }
方式四:
class Test:IDisposable { ~Test()// 析构函数 { Console.WriteLine("~Test()析构函数"); } public void Dispose() { Console.WriteLine("Dispose()");//throw new NotImplementedException(); } } class Program { static void Main(string[] args) { using (Test f = new Test()) { } GC.Collect(); Console.WriteLine("读取按键中"); Console.Read(); Console.WriteLine("读取到按键"); Console.WriteLine("程序结束"); } }
其它:直接按控制台关闭按钮,是不会调用析构函数的。
注:SuppressFinalize是取消执行终结器(析构函数)的意思。
本博客是个人工作中记录,更深层次的问题可以提供有偿技术支持。
另外建了几个QQ技术群:
2、全栈技术群:616945527
2、硬件嵌入式开发: 75764412
3、Go语言交流群:9924600
闲置域名WWW.EXAI.CN (超级人工智能)出售。
另外建了几个QQ技术群:
2、全栈技术群:616945527
2、硬件嵌入式开发: 75764412
3、Go语言交流群:9924600
闲置域名WWW.EXAI.CN (超级人工智能)出售。