题
我在看一些代码,它具有这样的说法:
~ConnectionManager()
{
Dispose(false);
}
该类实现了 IDisposable
接口,但是我不知道如果这是一部分波浪线(~)用。
解决方案
〜是析构函数
- 自动调用析构函数,不能显式调用。
- 析构函数不能超载。因此,一个类最多只能有一个析构函数。
- 析构函数不是继承的。因此,类没有除了可以在其中声明的析构函数。
- 析构函数不能与结构一起使用。它们仅用于课程。 当任何代码不再可能使用该实例时,实例就有资格进行销毁。
- 在实例符合销毁条件后,可以随时执行实例的析构函数。
- 当一个实例被破坏时,其继承链中的析构函数按顺序被调用,从大多数派生到最少派生。 醇>
完成
在C#中,Finalize方法执行标准C ++析构函数的操作。在C#中,您没有将其命名为Finalize - 您使用C ++析构函数语法在类的名称前面放置代字号(〜)。
<强>处置强>
最好在 Close()
或 Dispose()
方法中处理对象,该方法可由类的用户显式调用。完成(析构函数)由GC调用。
IDisposable 界面告诉全世界您的类保留了需要处理的资源,并为用户提供了释放它们的方法。如果确实需要在类中实现终结器,则Dispose方法应使用 GC.SuppressFinalize()
方法,以确保抑制实例的最终化。
使用什么?
明确调用析构函数是不合法的。您的析构函数将由垃圾收集器调用。如果您确实处理了想要尽快关闭和处理的宝贵的非托管资源(例如文件句柄),那么您应该实现IDisposable接口。
其他提示
这是一个 终结.说实话,你应该很少需要编写一个终结.你真的只需要编写一,如果:
- 你直接进入一个非管理资源(例如通过一个
IntPtr
)和不能使用SafeHandle
这使它更容易 - 你正在实施
IDisposable
在一个类,这不是密封的。(我的喜好是在密封的课程,除非他们是专为继承。) 一个终结的部分是规范处置模式,在这样的情况。
它用于表示类的析构函数。
与C ++相同,它是析构函数;但是在C#中你没有明确地调用它,它会在收集对象时被调用。
请参阅析构函数(C#编程指南)。但请注意,与C ++不同,程序员无法控制何时调用析构函数,因为这是由垃圾收集器决定的。
〜通常代表一个解构者。它在对象死亡之前运行。
不隶属于 StackOverflow