如果我当前的应用程序正在执行我的要求,我会感到有点困惑。我想基本上只创建一个Singleton,当Console应用程序终止时,调用Singleton的析构函数。我有它所以当我按下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();
}
编辑:搞定了,谢谢!
答案 0 :(得分:1)
您无法以编程方式调用析构函数。它总是由垃圾收集中的.NET CLR调用。但是对于你的单身人士,我强烈反对使用析构函数。
如果要释放任何资源,建议implement IDisposable interface。 或者任何自定义接口实现都可以释放任何资源,因为在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();
}
}