确保在.net类扩展到COM时调用Dispose

确保在.net类扩展到COM时调用Dispose,.net,com,idisposable,.net,Com,Idisposable,我向COM公开了一个.net类。该类继承自IDisposable,因为我需要清理一些非托管资源。在.net环境中,我会将类包装在一个using作用域中,以确保始终调用Dispose()。如果我使用COM包装器,是否有一些工具可以做到这一点?我正在从VB6初始化该类,我希望确保调用Dispose,或者我应该相信它最终会被CLR调用。Dispose不会自动调用,但会自动调用终结器。如果您有需要清理的非托管资源,请实现调用Dispose()的终结器。通常的做法是实现另一种方法,Dispose(bool

我向COM公开了一个.net类。该类继承自IDisposable,因为我需要清理一些非托管资源。在.net环境中,我会将类包装在一个using作用域中,以确保始终调用Dispose()。如果我使用COM包装器,是否有一些工具可以做到这一点?我正在从VB6初始化该类,我希望确保调用Dispose,或者我应该相信它最终会被CLR调用。Dispose不会自动调用,但会自动调用终结器。如果您有需要清理的非托管资源,请实现调用Dispose()的终结器。通常的做法是实现另一种方法,
Dispose(bool disposing)
,该方法通过IDisposable.Dispose()中的
true
和终结器中的
false
调用。如果disposing为true,则应清理所有托管资源(如果需要)并调用
GC。SuppressFinalize(this)
将不会自动调用Dispose,但将调用终结器。如果您有需要清理的非托管资源,请实现调用Dispose()的终结器。通常的做法是实现另一种方法,
Dispose(bool disposing)
,该方法通过IDisposable.Dispose()中的
true
和终结器中的
false
调用。如果disposing为true,您应该清理所有托管资源(如果需要)并调用
GC.SuppressFinalize(this)

我的理解是(可能非常生锈)COM可调用包装器(CCW)在COM对象的refcount降至0时不会调用
Dispose()
,它不再引用CLR对象

您需要要求对象的用户显式调用
Dispose()
,如果用户不调用,则依赖终结器进行清理

以下是一些可能有帮助的其他想法:

我的理解是(可能非常生疏)COM可调用包装器(CCW)在COM对象的refcount降至0时不会调用
Dispose()
,它不再引用CLR对象

您需要要求对象的用户显式调用
Dispose()
,如果用户不调用,则依赖终结器进行清理

以下是一些可能有帮助的其他想法: