关闭控制台应用程序时如何调用单一实例的析构函数?



如果我当前的应用程序正在做我需要的,我有点困惑。我基本上只想创建一个单例,当控制台应用程序终止时,调用单例析构函数。我有它,所以当我按 Enter 时控制台应用程序将终止,但我不确定这是否正在做我想要的。当我在析构函数中放置断点时,只有当我按 Enter 时,它才会被命中。我只是想确保我正在做的事情是正确的,如果不是,我该如何改变它。

这是我的单例:

public sealed class Singleton
{
private static readonly Lazy<Singleton> lazy = new Lazy<Singleton>(() => new Singleton());
public static Singleton Instance { get { return lazy.Value; } }
private Singleton() { }
~Singleton()
{
Console.WriteLine("Destructor Called."); // Breakpoint here
}
}

在我的主要

public static void Main(string[] args)
{
Singleton instance = Singleton.Instance;
Console.ReadLine();
}

编辑:让它工作,谢谢!

不能以编程方式调用析构函数。它始终由垃圾回收中的 .NET CLR 调用。但是,对于您的单例,我强烈建议不要使用析构函数。

建议实现 IDisposable 接口,如果要释放任何资源。或者任何自定义接口实现也可以释放任何资源,因为在 Singleton 上实现 IDisposable 很奇怪

public sealed class Singleton : IDisposable
{
private static readonly Lazy<Singleton> lazy = new Lazy<Singleton>(() => new Singleton());
public static Singleton Instance { get { return lazy.Value; } }
private Singleton() { }
~Singleton()
{
Console.WriteLine("Destructor Called."); // Breakpoint here
}
void IDisposable.Dispose()
{
Console.WriteLine("Dispose Called.");
GC.SuppressFinalize(this);
}
}
class Program
{
static void Main(string[] args)
{
Singleton.Instance.ToString();
((IDisposable)Singleton.Instance).Dispose();
GC.Collect();
}
}

最新更新