问题描述:
题
最好的办法是在这里做什么?我们应该吗
请详细说明您的答案。谢谢
public class FooClass : IDisposable
{
private readonly OtherDisposableClass _disposable;
private readonly string _imageSource;
private readonly string _action;
private readonly string _destination;
private bool _isInitialized;
public FooClass(OtherDisposableClass disposable)
{
_disposable = disposable;
}
~FooClass()
{
// Finalizer calls Dispose(false)
Dispose(false);
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
protected virtual void Dispose(bool disposing)
{
// Not possible because _disposable is marked readonly
_disposable = null;
}
}
Run Code Online (Sandbox Code Playgroud)
创建的东西OtherDisposableClass应该处理它......将它留在里面FooClass(如果你愿意,你可以拥有它readonly)。
将其设置为 null 无论如何都不会产生任何效果,它只会将 FooClass 内的引用设置为 null(无论如何都会被释放)。
编辑
从给出的代码来看,您甚至不需要在这里实现 IDisposable - 这只是让事情变得更加复杂。OtherDisposableClass如果您在 的构造函数中创建了 的实例,FooClass那么您可以实现 IDisposable 并只需OtherDisposableClass.Dispose()在FooClass.Dispose().
这里 FooClass 是通过依赖于 OtherFooClass 创建的 - OtherFooClass 将比 FooClass 更长寿 - 因此 FooClass 应该首先被 GC'd,然后就不会剩下对 OtherDisposableClass 的引用 - 这将允许它被 GC'd