私はこのような質問についてSOを調べましたが、かなりの数を見つけたとしても、それらのどれもがこの問題に光を投げかけました。
私がこのコードを持っているとしましょう:
public class SuperObject : IDisposable
{
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
protected virtual void Dispose(bool disposing) { }
}
protected virtual void Dispose(bool)
オンが必要SuperObject
ですか? そこに処分するものは本当に何もないので。
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
}
}
}
IDisposable を既に実装し、実装しているCustom
ようなクラスで使用したい、使用する必要がある、または使用しようとするとどうなりますか?System.Web.Mvc.Controller
public class Moo : Controller
{
Custom c;
public Moo()
{
c = new Custom();
}
// Use c throughout this class
}
で適切に処分するc
にはMoo
?