~MyClass()
C# で と書くと、これは基本的に に変換されることを私は知っていますoverride System.Object.Finalize()
。したがって、デストラクタを記述するかどうかに関係なく、CLR のすべての型には(少なくとも)Finalize()
メソッドが含まれます。System.Object
1] では、すべてのオブジェクトがデフォルトでファイナライザーを持っているということですか?
2] CLR がオブジェクトをファイナライズ キューに入れる必要があると判断する根拠は何ですか?
私はクラスを持っていたので、私はこれを求めていManagedResourceHolder
ます。このクラスは管理されていないリソースをまったく保持せず、メソッドも 必要ありませんでした。つまり、 finalizerがなかったため、呼び出しが必要ありませんでした。IDisposable
GC.SuppressFinalize(this)
IDisposable.Dispose()
~ManagedResourceHolder()
GC.SuppressFinalize(this)
3] 上記のシナリオのコンテキストでは、IDisposable を実装するときに常にファイナライザーを提供する必要がありますか? (アンマネージ リソースを保持しないクラスでも)
FxCop ルールCA1816により、これに関する違反が発生し、MSDN の CA フォーラムで質問したときに得た回答に混乱しました。
ありがとう。