在 C # 中,函数名前面的波浪线是什么意思?

我正在看一些代码,它有这样的语句:

~ConnectionManager()
{
Dispose(false);
}

该类实现了 IDisposable接口,但我不知道这是否是波浪线(~)的用途。

54046 次浏览

它用于指示类的析构函数。

与 C + + 一样,它是析构函数; 但是在 C # 中您不显式地调用它,它是在垃圾收集器收集对象时调用的。

~ 通常表示一个解构函数。它在一个对象死亡之前运行。

下面是我找到的 C # 解构器的描述

这是 终结者。老实说,您应该很少需要编写终结器。你真的只需要写一个,如果:

  • 您可以直接访问非托管资源(例如通过 IntPtr) ,但是不能使用 SafeHandle,这使得访问变得更加容易
  • 您正在一个未密封的类中实现 IDisposable。(我倾向于密封类,除非它们是为继承而设计的。)在这种情况下,终结器是规范 Dispose 模式的一部分。

~ 是破坏者

  1. 析构函数是自动调用的,不能显式调用。
  2. 不能重载析构函数。因此,一个类最多只能有一个析构函数。
  3. 析构函数不是继承的。因此,除了可以在类中声明的析构函数之外,类没有其他的析构函数。
  4. 析构函数不能与结构函数一起使用,它们只能与类一起使用。 当任何代码不再可能使用该实例时,该实例就有资格进行销毁。
  5. 实例的析构函数可以在实例有资格进行销毁之后的任何时候执行。
  6. 当一个实例被销毁时,其继承链中的析构函数将被调用,顺序从派生最多到派生最少。

最后确定

在 C # 中,Finalize 方法执行标准 C + + 析构函数会执行的操作。在 C # 中,不将其命名为 Finalize ——而是使用 C + + 析构函数语法,在类的名称前放置一个波浪(~)符号。

处理掉

最好在 Close()Dispose()方法中释放对象,该方法可由类的用户显式调用。Finalize (析构函数)由 GC 调用。

一次性手机接口告诉世界,您的类持有需要释放的资源,并为用户提供释放这些资源的方法。如果确实需要在类中实现终结器,则 Dispose 方法 应该使用 GC.SuppressFinalize()方法来确保抑制实例的终结。

用什么?

显式调用析构函数是不合法的。您的析构函数将由垃圾收集器调用。如果确实需要处理希望尽快关闭和释放的宝贵非托管资源(如文件句柄) ,则应该实现 IDisposable 接口。

参见 析构函数(C # 编程指南)。但是请注意,与 C + + 不同,程序员无法控制何时调用析构函数,因为这是由垃圾收集器决定的。