8

ILSpyを使用して XNA フレームワーク内のいくつかのdll を調べていて、これに遭遇しました。

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

上記の感嘆符は何ですか? それは ILSpy の問題ですか、それとも何か他の問題ですか?

クラスには別のデストラクタがあることに注意してください: private unsafe void ~KerningHelper().

4

1 に答える 1

7

コメントが述べているように、感嘆符はファイナライザー メソッドの C++/CLI マーカーです。オブジェクトを明示的に破棄するときに呼び出される従来の C++ デストラクター (~) とは異なり、ファイナライザーはガベージ コレクター スレッドによって呼び出されます。公式の詳細はこちらで確認できます。

!KerningHelper()C++/CLI ファイナライザは C# のデストラクタと同等であるため、 ILSpy が を に変換することを期待し~KerningHelper()ます。C++/CLI の明示的な ~destructor とは異なり、GC が到達したときに発生する非決定論的なメソッドですdelete。明示的な Dispose 呼び出しが行われます。

于 2012-04-17T09:00:35.093 に答える