为什么COM对象不使用IDisposable?

Jon*_*len 7 .net com

为什么COM对象在其CLR Callable Wrappers中不使用IDisposable?

Joe*_*Joe 4

据推测,这样的IDisposable实现将调用Marshal.ReleaseComObject

在某些情况下,调用 Marshal.ReleaseComObject 是一个好主意,例如,在 .NET 客户端自动化后让 Office 应用程序退出

但作为国家的文档Marshal.ReleaseComObject,它不应该在一般情况下使用 - 并且可能根本不用于进程内 COM 对象。 这是一篇博客文章,其中包含一些更详细的信息

IDisposable因此,通过从RCW 的实现中调用它来鼓励人们使用它并不是一个好主意。

然而,有趣的是 Silverlight 4AutomationFactory.CreateObject方法确实返回一个动态对象,即IDisposable. 测试似乎表明,这实际上释放了 COM 引用,尽管文档有点稀疏。