如果我有一个仅使用托管资源的课程,那么我不认为有必要完全实现IDisposable模式。
当然这已经足够了:
public class ManagedResourceClient : IDisposable
{
private ITheManagedResource _myManagedResource = new TheManagedResource()
public void Dispose()
{
if ( _myManagedResource != null )
{
_myManagedResource.Dispose();
_myManagedResource = null;
}
}
}
我没有看到任何使用理由:
上述情况可以确认为正确吗?
答案 0 :(得分:4)
你几乎拥有它,因为你的类没有密封,有人可以从你的类派生,派生类也可能需要处理一个对象。让你的课程密封,你当前的实施是好的。
public sealed class ManagedResourceClient : IDisposable
{
private ITheManagedResource _myManagedResource = new TheManagedResource()
public void Dispose()
{
if ( _myManagedResource != null )
{
_myManagedResource.Dispose();
_myManagedResource = null;
}
}
}
如果你想了解更多关于处理的信息(以及为什么微软提供的Finializer的例子实际上是一个不好的例子),请参阅Stepen Cleary的这篇非常好的文章:" IDisposable: What Your Mother Never Told You About Resource Deallocation"