有几种不同的操作方式
方式一:
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是取消执行终结器(析构函数)的意思。