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 (超级人工智能)出售。

浙公网安备 33010602011771号