我在SO上查找了与此类似的问题,尽管我找到了相当多的答案,但是它们都没有为我解决这个问题提供任何帮助。
假设我有以下代码:
public class SuperObject : IDisposable
{
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
protected virtual void Dispose(bool disposing) { }
}
- 我需要在
SuperObject
上使用protected virtual void Dispose(bool)
吗?因为实际上没有什么需要处理的。
public interface ICustom : IDisposable { }
public class Custom : ICustom
{
public SuperObject Super { get; protected set; }
public Custom()
{
Super = new SuperObject();
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
public virtual void Dispose(bool disposing)
{
if (!disposing) return;
if (Super != null)
Super.Dispose();
}
}
public class Foo
{
public Foo()
{
using (var c = new Custom())
{
//do magic with c
}
}
}
如果我想/需要/尝试在像 System.Web.Mvc.Controller
这样已经实现并且一直实现了 IDisposable 的类上使用 Custom
,会发生什么?
public class Moo : Controller
{
Custom c;
public Moo()
{
c = new Custom();
}
// Use c throughout this class
}
如何正确处理 Moo
中的 c
?
GC.SuppressFinalize()
? - Hamlet Hakobyan