Verständnis Einweg-Objekte

Ist, habe ich mich SO über eine Frage wie diese, und sogar die, die ich gefunden habe schon ein paar, alle diese warf kein Licht in diese Angelegenheit für mich.

Nehmen wir an ich habe diesen code:

public class SuperObject : IDisposable
{
    public void Dispose()
    {
        Dispose(true);
        GC.SuppressFinalize(this);
    }

    protected virtual void Dispose(bool disposing) { }
}
  • Brauche ich die protected virtual void Dispose(bool) auf SuperObject? Da gibt es wirklich nichts zu entsorgen gibt.
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
        }
    }
}

Nun, was passiert, wenn ich wollen/müssen/versuchen Custom auf eine Klasse wie System.Web.Mvc.Controller die bereits implementiert und implementiert IDisposable?

public class Moo : Controller
{
    Custom c;

    public Moo()
    {
        c = new Custom();
    }

    //Use c throughout this class        
}

, Wie man richtig entsorgen c im Moo?

Wenn es nichts zu Entsorgen, nicht implementieren IDisposable.
Warum verwenden Sie GC.SuppressFinalize() wenn Sie noch nicht Finaizer?
das ist eine gute Frage, vielleicht könntest du hier Hilfe: stackoverflow.com/q/19078536/544283.

InformationsquelleAutor Esteban | 2013-09-29

Schreibe einen Kommentar