我有一个使用 tlbimp.exe 创建的 COM 类型和一个包装此对象的 C# 类。 我想在我的 C# 包装器的终结器中执行一些清理工作。 遵循 这里 的指南,我可能会编写类似以下内容的代码:
我知道finalizer的执行顺序是不确定的,所以我不应该尝试使用任何实现finalizer的对象,但据我所知,tlbimp生成的COM类型不实现finalizer,因此上述问题应该没有问题。
然而,我没有找到任何官方文档来证明这一点,所以我的问题是:在finalizer中引用和使用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...
}
我知道finalizer的执行顺序是不确定的,所以我不应该尝试使用任何实现finalizer的对象,但据我所知,tlbimp生成的COM类型不实现finalizer,因此上述问题应该没有问题。
然而,我没有找到任何官方文档来证明这一点,所以我的问题是:在finalizer中引用和使用COM对象是否安全?