Имам тип COM (създаден с помощта на tlbimp.exe) и C# клас, който обвива този обект. Искам да извърша известно почистване във финализатора за моя C# обвивка. Следвайки указанията тук мога да напиша нещо подобно:
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...
}
Знам, че финализаторите могат да работят във всякакъв ред и затова не трябва да се опитвам да използвам обект, който имплементира финализатор, но доколкото мога да кажа, генерираните от tlbimp COM типове не имплементират финализатор и така горното трябва да е ОК.
Не успях обаче да намеря официална документация за това, така че въпросът ми е безопасно ли е да се препращат и използват COM обекти във финализатор?