Laden...

Wie funktioniert Dispose und wann soll es verwendet werden

Erstellt von Palladin007 vor 10 Jahren Letzter Beitrag vor 10 Jahren 1.288 Views
Hinweis von Abt vor 10 Jahren

Abgetrennt aus BinaryReader um Bibliothek zu lesen

Palladin007 Themenstarter:in
2.080 Beiträge seit 2012
vor 10 Jahren

Ok, wieder was gelernt, danke ^^

Zu Close:

So weit ich weiß, ruft die Close-Methode meist (oder gar immer) auch Dispose auf.
Was macht die Methode sonst noch, kann es manchmal auch besser sein, Close zu verwenden?

Zu Dispose:

Du sagst, dass das Dispose hier sehr defensiv implementiert wurde.
Ist das nicht immer so, dass nur dann disposed wird, wenn es nicht sowieso schon geschehen ist?

Und kann ich davon aus gehen, dass eine Klasse, die ein Objekt benötigt, das IDisposible implementiert, den Aufruf von Dispose auch weiter leitet?

NuGet Packages im Code auslesen
lock Alternative für async/await

Beim CleanCode zählen nicht die Regeln, sondern dass wir uns mit diesen Regeln befassen, selbst wenn wir sie nicht befolgen - hoffentlich nach reiflichen Überlegungen.

16.842 Beiträge seit 2008
vor 10 Jahren

Bei .NET implementierungen kannst Du eigentlich davon ausgehen, dass alles - wo nötig - sauber disposed wird und defensiv entwickelt wurde.
Bei 3rd Party Libs hingegen nicht.

Ich zB verwende in meinen Repositories gerne IDisposable, damit der Code schöner aussieht. Dispose selbst ist aber (meist, bis auf meine Repositories mit Cache) leer 😉
Hier sogar die Connection zu disposen wäre ein Fehler, da sich dies auf auf andere Repositories auswirken und damit den UoW-Pattern verletzen würde.

using() ist ohnehin nur ein mehr oder weniger Alias für den Compiler.

Aus

using(var binaryReader = new BinaryReader( fileStream, ....)
{
    // ....
}

macht der Compiler


BinaryReader binaryReader = null;
try
{
   binaryReader = new BinaryReader( fileStream, ....);
}
finally
{
  if (binaryReader != null)
  {
      ( ( IDisposable ) binaryReader ).Dispose( );
  }
}

49.485 Beiträge seit 2005
vor 10 Jahren

Hallo Palladin007,

siehe auch Werden IDisposable Objekte innerhalb einer IDisposable erbenden Klasse automatisch Disposed? => Nein und die darin enthaltenen Links.

herbivore