我看着在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
?
当没有什么可配置的时候,请不要实施IDisposable。 –
为什么当你没有Finaizer时使用'GC.SuppressFinalize()'? –
@HamletHakobyan这是一个很好的问题,也许你可以在这里帮忙:http://stackoverflow.com/q/19078536/544283。 – Esteban