在C#中,函数名前的波浪线是什么意思?
我在看一些代码,它有这样一句话:在C#中,函数名前的波浪线是什么意思?,c#,syntax,tilde,C#,Syntax,Tilde,我在看一些代码,它有这样一句话: ~ConnectionManager() { Dispose(false); } < P>类实现了 IDISPOLIDYE/接口,但不知道是否是TILDE(~)使用的一部分。 < P>用于指示类的析构函数。 < P>与C++相同,它是析构函数;但是在C#中,您不会显式调用它,它是在垃圾收集器收集对象时调用的。~通常表示解构器。在对象死亡之前运行 这是一个很好的例子。老实说,您应该很少需要编写终结器。只有在以下情况下,您才需要编写一个: 您可以直接访问
~ConnectionManager()
{
Dispose(false);
}
< P>类实现了
- 您可以直接访问非托管资源(例如,通过
),但不能使用IntPtr
,这会使访问更容易SafeHandle
- 您正在未密封的类中实现
。(我倾向于密封类,除非它们是为继承而设计的。)在这种情况下,终结器是规范的Dispose模式的一部分IDisposable
Close()
或dispose()
方法中处置对象。Finalize(析构函数)由GC调用
IDisposable接口告诉世界,您的类保留了需要释放的资源,并为用户提供了释放这些资源的方法。如果确实需要在类中实现终结器,Dispose方法应该使用GC.SuppressFinalize()
方法来确保实例的终结被抑制
使用什么?
显式调用析构函数是不合法的。垃圾收集器将调用析构函数。如果您确实要处理宝贵的非托管资源(如文件句柄),并希望尽快关闭和处置这些资源,则应该实现IDisposable接口。请参阅。但是,与C++不同,程序员不能控制析构函数何时被调用,因为这是垃圾回收器所决定的。< / P>它们都是正确的,这取决于你读到的C规范。最新的MS one(unified C#3.0)将它们称为析构函数(如第10.13节),但ECMA规范将它们称为终结器。@1800INFORMATION:语法元素正确地称为析构函数。如果类有析构函数,C#编译器将自动生成一个终结器,其中包含一个通常无用的
try/finally
块,以确保调用父Finalize
方法。大多数对于析构函数是正确的,对于终结器也是正确的,反之亦然,但是这些词的意思略有不同。我不知道过去是怎样的。但是现在析构函数被继承了。查看此链接了解更多信息(查看最后的示例):@RononDex链接到的页面第3点声明“终结器无法继承”,这与您的评论相矛盾。无可否认,这有点令人困惑,因为虽然它们不能被继承,“继承链中的所有实例都递归地调用Finalize
方法,从派生度最高的实例到派生度最低的实例”。但请注意,这与可继承析构函数的行为不同。@MarkAmery啊,我明白了,所以基本上它们的调用顺序与继承的东西相反?正确的术语应该是析构函数/终结器,而不是解构器。解构器是指解构构造函数的语法。