Feedback

C# - Dispose implementieren

Veröffentlicht von am 24.02.2006
(8 Bewertungen)
Vielleicht nützt euch die Implementierung, die ich in meinen Klassen verwende.
GFU-Schulungen  [Anzeige]

C# 2017/2015/2013 Grundlagen

Nach Abschluss des Kurses sind Ihnen die Datentypen und Klassenbibliotheken von C# bekannt. Außerdem sind Sie in der Lage, mit Variablen umzugehen und deren Typen zu konvertieren. Sie definieren Namespaces und setzen diese ein, Sie erstellen eigene Klassen  und bauen Trouble Shooting ein.

Visual Studio Team Foundation Server 2017/2015 (TFS) - Komplett 

//#######################################################################
// Close, IDisposable.Dispose, Dispose (bool) und Destruktor (= Finalize)
//
// Die eigentliche Logik findet in Dispose (bool) statt. Deshalb ist
// Dispose (bool) auch virtual. Unterklassen können hier die
// Funktionalität der Objektzerstörung erweitern.
//
// Alle anderen Methoden rufen nur direkt oder indirekt Dispose (bool)
// auf. Deshalb sind sie absichtlich nicht virtual.
//
// - Close ist für die Verwendung durch den Benutzer der Klasse gedacht.
//
// - IDisposable.Dispose dagegen die Implementierung von der IDisposable
//   Schnittstelle gedacht und wird z.B. bei Verwendung der
//   using-Anweisung aufgerufen.
//   (Man sieht, dass in diesem Fall Close umgangen wird, aber deshalb
//   ist Close ja auch nicht virtual.)
//
// - Der Destruktor ist für den Aufruf durch den GC gedacht.
//
// Durch den Parameter von Dispose (bool) kann man unterscheiden, ob
// Dispose (bool) vom Benutzer oder vom CG aufgerufen wurde. Da beim
// Aufruf durch den CG die enthalteten Objekte schon garbage-collected
// sein können, darf man auf diese nicht mehr zugreifen.
//
// Optional: Wenn die Bezeichnung 'Close' für das Beenden der Lebensdauer
// von Objekten einer Klasse unzutreffend oder irreführend wäre, kann
// man auch den Namen 'Close' durch 'Dispose' ersetzen, ohne die
// Implementierung zu ändern. Die andere Option für diesen Fall wäre,
// die Close-Methode zu entfernen und 'IDisposable.Dispose' in 'Dispose'
// umzubenennen.
//
//#######################################################################

//=======================================================================
public void Close ()
{
   ((IDisposable)this).Dispose ();
}

//=======================================================================
void IDisposable.Dispose ()
{
   Dispose (true);
   GC.SuppressFinalize (this);
}

//=======================================================================
~MyClass ()
{
   Dispose (false);
}

//=======================================================================
protected virtual void Dispose (bool fDisposing)
{
   if (fDisposing) {
      // Hier die verwalteten Ressourcen freigeben
   }
   // Hier die unverwalteten Ressourcen freigeben
}
Abgelegt unter Dispose, Destruktor, implementieren.

1 Kommentare zum Snippet

Vertexwahn schrieb am 27.02.2006:
http://www.dotnetpro.de/articles/freearticles/pdf/2005-05-Dispose.pdf
 

Logge dich ein, um hier zu kommentieren!

Ähnliche Snippets