Laden...

Wie funktioniert Dispose und wann soll es verwendet werden

Erstellt von Palladin007 vor 9 Jahren Letzter Beitrag vor 9 Jahren 1.264 Views
Hinweis von Abt vor 9 Jahren

Abgetrennt aus BinaryReader um Bibliothek zu lesen

Palladin007 Themenstarter:in
2.057 Beiträge seit 2012
vor 9 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?

Wer [...] kann, ist klar im Vorteil.

lockAlternative fürasync/await: https://github.com/loop8ack/AsyncTicketLock

16.634 Beiträge seit 2008
vor 9 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 9 Jahren

Hallo Palladin007,

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

herbivore