私はCOMタイプ(tlbimp.exeを使用して作成)とこのオブジェクトをラップするC#クラスを持っています。私はC#ラッパーのファイナライザでいくつかのクリーンアップを実行したいです。私はしかし、私の知る限ります。tlbimpを伝えることができるよう、ファイナライザは、任意の順序で実行することができますので、私はファイナライザを実装する任意のオブジェクトを使用しようとするべきではないことを知っているファイナライザでCOMオブジェクトを参照/使用できますか?
public class MyClass : IDisposable
{
private IMyComObject comObject;
public MyClass()
{
comObject = new MyComObject();
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
~MyClass()
{
Dispose(false);
}
protected virtual void Dispose(bool disposing)
{
// Be tollerant of partially constructed instances
if (comObject != null)
{
comObject.Cleanup();
// Account for object being disposed twice
comObject = null;
}
}
// Other bits go here...
}
:ガイドラインhere以下の私はこのような何かを書くかもしれません生成されたCOMタイプはファイナライザを実装していないため、上記はOKです。
これについての公式の文書は見つかりませんでしたので、私の質問はです。ファイナライザでCOMオブジェクトを参照して使用するのは安全ですか?
あなたのDisposeメソッドの先頭にGCを起動しようとしましたか? – Bond
ファイナライザを実装しているので、COMオブジェクトが解放されます。だから、それは安全ではありません。 –
@HansPassant私はそれを考えていましたが、これを述べている文書を見つけることができず、逆アセンブリのファイナライザも表示されません。 – Justin