我正在查看一些代码,它有这样的陈述:
~ConnectionManager()
{
Dispose(false);
}
该类实现了IDisposable
接口,但我不知道这是否是使用波浪号(〜)的一部分。
答案 0 :(得分:190)
〜是析构函数
完成
在C#中,Finalize方法执行标准C ++析构函数的操作。在C#中,您没有将其命名为Finalize - 您使用C ++析构函数语法在类的名称前面放置代字号(〜)。
<强>处置强>
最好以Close()
或Dispose()
方法处理对象,这些方法可以由类的用户显式调用。完成(析构函数)由GC调用。
IDisposable 界面告诉全世界您的类保留了需要处理的资源,并为用户提供了释放它们的方法。如果确实需要在类中实现终结器,则Dispose方法应使用GC.SuppressFinalize()
方法,以确保抑制实例的最终化。
使用什么?
明确调用析构函数是不合法的。您的析构函数将由垃圾收集器调用。如果您确实处理了想要尽快关闭和处理的宝贵的非托管资源(例如文件句柄),那么您应该实现IDisposable接口。
答案 1 :(得分:43)
这是finalizer。说实话,你应该很少需要写一个终结器。你真的只需要写一个:
IntPtr
),但无法使用SafeHandle
,这样可以更轻松IDisposable
。 (我的首选是密封类,除非它们是为继承而设计的。)在这种情况下,终结器是规范Dispose模式的一部分。答案 2 :(得分:8)
它用于表示类的析构函数。
答案 3 :(得分:4)
与C ++相同,它是析构函数;但是在C#中你没有明确地调用它,它会在收集对象时被调用。
答案 4 :(得分:3)
见Destructors (C# Programming Guide)。但请注意,与C ++不同,程序员无法控制何时调用析构函数,因为这是由垃圾收集器决定的。
答案 5 :(得分:1)
〜通常代表一个解构者。它在对象死亡之前运行。