【发布时间】:2017-03-29 13:45:35
【问题描述】:
如果我有一个只使用托管资源的类,那么我认为没有必要完全实现 IDisposable 模式。
当然这就足够了:
public class ManagedResourceClient : IDisposable
{
private ITheManagedResource _myManagedResource = new TheManagedResource()
public void Dispose()
{
if ( _myManagedResource != null )
{
_myManagedResource.Dispose();
_myManagedResource = null;
}
}
}
我看不出有什么理由使用:
- 一个终结器,因为它只使用实现 IDisposable 的托管资源
- 'disposing' 标志,因为这是由 null 检查处理的
- 一种虚拟的 Disposing 方法,因为不需要区分 GC 调用和直接调用。
以上可以确认是正确的吗?
【问题讨论】:
-
这个应用程序是多线程的吗?
-
"我有一个只使用托管资源的类" 那么你可能不需要 dispose
-
@Servy:瞧,下一个无缘无故实现
IDisposable的对象 -
说你有一个继承自 ManagedResourceClient 的类,它使用了许多非托管资源。您再次重新实现 IDisposable !这里使用你的虚拟 Dispose(bool) 方法
-
OP 您需要提及您是否正在使用非托管资源。如果整个应用程序只使用托管资源,那么不,你不需要它
标签: c# .net memory-management garbage-collection