函数名之前的倾斜在C#中意味着什么?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (13)

我正在看一些代码,它有这样的声明:

~ConnectionManager()
{
    Dispose(false);
}

类实现IDisposable接口,但我不知道这是否是使用倾斜体(~)的一部分。

提问于
用户回答回答于

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

在C#中,Finish方法执行标准C++析构函数将执行的操作。在C#中,没有将它命名为Finish--使用了C++析构函数语法,即在类的名称之前放置一个tilde(~)符号。

最好在Close()Dispose()方法,该类的用户可以显式调用该方法。GC调用Finish(析构函数)。

IDisposable接口告诉世界,您的类保存了需要处理的资源,并为用户提供了一种释放资源的方法。如果确实需要在类中实现终结器,则需要使用Dispose方法。使用GC.SuppressFinalize()方法,以确保抑制对实例的终结。

用户回答回答于

只需要在下列情况下编写一个:

  • 可以直接访问非托管资源(例如,通过IntPtr)你不能用SafeHandle这使得它更容易
  • 正在实现IDisposable在一个没有密封的班级里。(我更喜欢密封类,除非它们是为继承而设计的。)。在这种情况下,终结器是规范处理模式的一部分。

扫码关注云+社区