函数名称在C#中的意义是什么?

我正在看一些代码,它有这样的说法:

~ConnectionManager() { Dispose(false); } 

这个类实现了IDisposable接口,但我不知道这是否是用于代字号(〜)的部分。

〜是析构函数

  1. 析构函数是自动调用的,不能被显式调用。
  2. 析构函数不能被重载。 因此,一个类最多可以有一个析构函数。
  3. 析构函数不被inheritance。 因此,一个类除了可以在其中声明的那个之外没有任何析构函数。
  4. 析构函数不能用于结构体。 他们只用于类。 当任何代码不再可能使用实例时,实例就有资格销毁。
  5. 实例的析构函数可能在实例有资格销毁后随时发生。
  6. 当一个实例被破坏时,inheritance链中的析构函数按照从大多数派生到最小派生的顺序被调用。

最终确定

在C#中,Finalize方法执行标准C ++析构函数将执行的操作。 在C#中,你不需要命名Finalize – 你可以使用C ++析构函数,在类的名字前面加上波浪号(〜)。

部署

最好将对象放置在Close()Dispose()方法中,该方法可以由类的用户明确地调用。 Finalize(析构函数)由GC调用。

IDisposable接口告诉世界,你的类持有需要处置的资源,并为用户提供一种释放方式。 如果您确实需要在类中实现终结器,那么您的Dispose方法应该使用GC.SuppressFinalize()方法来确保您的实例的终止被抑制。

使用什么?

明确调用析构函数是不合法的。 你的析构函数将被垃圾收集器调用。 如果您确实要尽快处理要closures和处理的宝贵的非托pipe资源(如文件句柄),则应该实现IDisposable接口。

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

  • 你可以直接访问一个非托pipe资源(例如通过一个IntPtr ),你不能使用SafeHandle这使得它更容易
  • 你在一个没有密封的类中实现了IDisposable 。 (我的首选是封闭类,除非它们是为了inheritance而devise的。)在这种情况下,终结器是规范的Dispose模式的一部分。

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

和C ++一样,它是析构函数; 但是在C#中,您不会明确地调用它,而是在收集对象时调用它。

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

通常代表一个解构主义者。 在对象死亡之前运行。

这里是我find的C#解构器的描述

上面的终结器上的一点,您可能需要调用它的情况。 您需要他们释放非托pipe资源,这通常比数据库更常见。 SQLConnection是一个例子,当你完成它的时候,你应该总是调用Dispose()。

一篇文章: http : //www.codeproject.com/KB/cs/idisposable.aspx