Ja, es sei denn, Sie erhalten es von einem Anrufer, der es benötigt, wenn Sie fertig sind oder die Verantwortung für den Aufruf von Dispose()
übernommen haben. Wichtig ist, dass jemand Dispose()
aufruft und wenn Sie eine IDisposable
Instanz übergeben müssen, muss ein Verständnis ("Vertrag") darüber bestehen, ob Sie dafür Eigentümer sind (und also müssen Sie es entsorgen) oder ob Sie es "leihen" und der Anrufer wird es verwenden / entsorgen es bei Ihrer Rückkehr. Dies sind die Arten von Dingen, die gute APIs in ihrer Dokumentation haben.
Wenn Sie das Objekt instanziieren, erleichtern Sie sich die automatische Entsorgung, indem Sie using
Achten Sie darauf, die Elemente zu entfernen, bevor sie den Umfang verlieren .
Am besten verwenden Sie die using
-Anweisung, oder Sie können% manuell aufrufen co_de%, aber bevor es den Umfang verliert und für die Garbage Collection geeignet wird.
Sie sehen möglicherweise: CA2000: Objekte vor dem Verlust des Bereichs löschen
Wenn ein wegwerfbares Objekt nicht explizit vor allem entsorgt wird Hinweise darauf sind außerhalb des Geltungsbereiches, das Objekt wird bei einigen entsorgt unbestimmte Zeit, wenn der Garbage Collector den Finalizer von ausführt das Objekt. Da ein außergewöhnliches Ereignis auftreten kann, das verhindert wird der Finalizer des Objekts ausgeführt werden soll, sollte das Objekt sein explizit stattdessen angeordnet.
Fast immer ja, aber hier ist ein Beispiel dafür, wenn etwas entlehnt zu Problemen führen kann. Ich habe ein Disposal-Repository mit zwei Konstruktoren erstellt, einer mit einem DbContext und einem anderen Standardkonstruktor, der den DbContext selbst erstellt. Ich stieß auf Instanzen, in denen mein Repository entsorgt werden würde, was die Beseitigung des DbContext auslösen würde (weil ich es ihm gesagt hatte), und das verursachte manchmal Probleme, weil ich den DbContext, der an anderer Stelle im Code übergeben wurde, brauchte.
>In diesem Fall erstellt das Repository den DbContext und muss dafür verantwortlich sein und darüber verfügen, weil kein anderer Code es kann, aber wenn der DbContext durch einen anderen Code übergeben wird, sollte die Entsorgung des DbContext in der Verantwortung des Code, der es erstellt hat.
Nicht zwingend in allen Szenarien, aber es ist eine gute Vorgehensweise, ein Objekt zu entsorgen. Wenn Sie dies nicht für jedes Objekt tun möchten, verwenden Sie using {}
, auf dem Disposable implementiert ist. Es wird darauf achten, das Objekt zu verschenken, wenn der Codeblock vorüber ist.
Tags und Links .net c# idisposable