问题描述:
问题
最好的办法是在这里做什么?我们应该吗
请详细说明您的答案。谢谢
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;
}
}
最佳答案
创建OtherDisposableClass
的东西应该将其丢弃...将其保留在FooClass
中(如果愿意,可以将其设置为readonly
)。
将其设置为null仍然没有任何作用,它只会将FooClass中的引用设置为null(无论如何都将被处置)。
编辑
从给出的代码看来,您甚至不需要在此处实现IDisposable-这仅仅是使事情复杂化了。如果您在OtherDisposableClass
的构造函数中创建了FooClass
的实例,则可以实现IDisposable并只需在OtherDisposableClass.Dispose()
内调用FooClass.Dispose()
即可。
这里创建的FooClass依赖于OtherFooClass-OtherFooClass将超过FooClass-因此,应该首先对FooClass进行GC处理,然后再不保留对OtherDisposableClass的引用-从而可以对它进行GC处理。
关于c# - 如果对象是IDisposable类的字段,我们是否应该将对象标记为只读,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20051486/