ILSpy 中显示的奇数类成员语法

本文关键字:成员 语法 显示 ILSpy | 更新日期: 2023-09-27 18:31:17

我正在使用ILSpy在XNA框架中浏览了一些dll,并遇到了这个:

class KerningHelper
{
    private void !KerningHelper()
    {
        ((IDisposable)this).Dispose();
    }
}

上面的感叹号是干什么用的?是 ILSpy 的问题,还是其他问题?

请注意,该类有一个单独的析构函数:private unsafe void ~KerningHelper()

ILSpy 中显示的奇数类成员语法

如注释所述,感叹号是终结器方法的 C++/CLI 标记。与显式释放对象时调用的传统C++析构函数 (~) 不同,终结器由垃圾回收器线程调用。您可以在此处查看官方详细信息。

我希望 ILSpy 将!KerningHelper()转换为 ~KerningHelper(),因为 C++/CLI 终结器等效于 C# 的析构函数 - 它是一种非确定性方法,当 GC 到达它时发生,不像 C++/CLI 的显式 ~destructor,当您调用delete或进行显式 Dispose 调用时会调用它。