我使用 ILSpy 检查了 XNA 框架中的一些 dll 文件,发现了以下内容:
class KerningHelper
{
private void !KerningHelper()
{
((IDisposable)this).Dispose();
}
}
在上面的内容中,感叹号是用来表示什么的?这是与ILSpy有关还是其他问题?请注意,该类有一个单独的析构函数:
private unsafe void ~KerningHelper()
。我使用 ILSpy 检查了 XNA 框架中的一些 dll 文件,发现了以下内容:
class KerningHelper
{
private void !KerningHelper()
{
((IDisposable)this).Dispose();
}
}
private unsafe void ~KerningHelper()
。!KerningHelper()
翻译为~KerningHelper()
,因为C++/CLI finalizer等效于C#的析构函数-它是一种不确定性方法,当GC到达它时才会发生,而不像C++/CLI的显式~析构函数,后者在调用delete
或进行显式Dispose调用时被调用。KerningHelper
也有一个析构函数,所以我猜ILSpy使用!
来表示它与析构函数不同。如果您知道终结器的用途,我会很感激,因为在我找到的类中,我认为dispose
应该被调用,所以我不明白它的用途(即何时会使用终结器而不是/以及析构函数?)。 - George Duckett
finalizer
而不是destructor
,也许与此有关。在这里看一下:http://en.wikipedia.org/wiki/C%2B%2B/CLI#Finalizers_and_automatic_variables - Nick