Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Dispose: sollten Referenzen explizit auf null gesetzt werden?

Moderationshinweis von gfoidl (25.11.2011 - 19:33)

Abgeteilt von Dispose implementieren und verwenden (IDisposable)

Gehirnpfirsich
myCSharp.de - Member



Dabei seit:
Beiträge: 5

Themenstarter:

beantworten | zitieren | melden

Hallo zusammen,

das ist ein sehr informativer Thread, aber ich hätte trotzdem noch ein paar Fragen zum Dispose =)

1. Ist folgende Implementierung richtig? Ist das "this.myClass2 = null;" im Dispose von Class1 nötig? Gehe ich recht in der Annahme, daß wenn ich es nicht auf null setze ja noch eine Referenz existiert und der Speicher der Klasse(n) vom GC nicht freigegeben wird?

public class Class1 : IDisposable
{
    private Class2 myClass2;
    public Class1()
    {
         this.myClass2 = new Class2();
    }
    protected virtual void Dispose(bool disposing)
    {
         if (disposing)
         {
              if (this.myClass2 != null)
              {
                   this.myClass2.Dispose(disposing);
                   this.myClass2 = null;
              }
         }
    }
}

public class Class2 : IDisposable
{
    protected virtual void Dispose(bool disposing)
    {
      ...
    }
}

2. Wird in einer vom VisualStudio Designer erstellten Form die auf der Form befindlichen Controls automatisch Dispose aufgerufen wenn die Form disposed wird oder muß ich das selbst in der Dispose() der Form machen? (dort wird vom Designer ja nur base.Dispose(); erzeugt).

Viele Grüße
Max
private Nachricht | Beiträge des Benutzers
Gelöschter Benutzer

beantworten | zitieren | melden

zu 1:
der gc verfolgt alle referenzen. das bedeutet das du nciht manuell referenzen zu anderen objekten auf null setzen musst, damit die objekte dort freigeräumt werden können, wenn dein objekt selbst abgeräumt werden soll (also keine referenz mehr auf dein objekt vorhanden ist)

zu 2:
schau dir den code vom designer an und schau dir im reflector die basismethoden an. in kurz: die controlcollection wird in einer for-schleife disposed.