函数名称在C#中的意义是什么?
我正在看一些代码,它有这样的说法:
~ConnectionManager() { Dispose(false); }
这个类实现了IDisposable
接口,但我不知道这是否是用于代字号(〜)的部分。
〜是析构函数
- 析构函数是自动调用的,不能被显式调用。
- 析构函数不能被重载。 因此,一个类最多可以有一个析构函数。
- 析构函数不被inheritance。 因此,一个类除了可以在其中声明的那个之外没有任何析构函数。
- 析构函数不能用于结构体。 他们只用于类。 当任何代码不再可能使用实例时,实例就有资格销毁。
- 实例的析构函数可能在实例有资格销毁后随时发生。
- 当一个实例被破坏时,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