10

リフレクションを使用して、クラスにデストラクタがあるかどうかを確認しようとしています。System.Reflection でコンストラクターを取得するメソッドが表示されます。クラスが C# でカスタム デストラクタを定義しているかどうかを確認する方法はありますか?

4

2 に答える 2

14

デストラクタメソッドが呼び出されるようFinalize()です。DeclaredOnlyすべてのオブジェクトにはこれがあるため、バインディング フラグを使用して取得しようとすることで、そのオブジェクトで明示的に定義されているかどうかを確認する必要があります。また、プライベートで非静的であるため、他の 2 つのフラグも必要です。

myObj.GetMethod("Finalize",
                BindingFlags.NonPublic |
                BindingFlags.Instance |
                BindingFlags.DeclaredOnly)

オブジェクトにデストラクタが定義されていない場合、これは null を返します。

于 2013-10-24T00:16:51.263 に答える
1

問題のインスタンスで定義された Finalize の存在についてリフレクションを確認します。

~ClassName 構文は、オブジェクトの Finalize() メソッドに変換されます。

すべての .NET オブジェクトには、System.Object レベルで定義された Finalize メソッドがあります。

于 2013-10-24T00:14:25.550 に答える