Ich habe eine Klasse, die IDisposable implementiert, da es ein privates Mitgliedsfeld "foo" hat, das IDisposable ist (das im Konstruktor initialisiert wird). Ich erhalte unerwartet einen CA2000-Code-Analyse-Fehler, der sicherstellt, dass ich foo entsorge. Allerdings habe ich foo.Dispose() im Dispose() Code meiner Klasse, der sich darum kümmern sollte.Warum bekomme ich CA2000 mit einem privaten Member IDisposable innerhalb meiner IDisposable-Klasse?
Ich habe einige Suche herum und überraschend kann keine Antwort finden. Was mache ich falsch? Offensichtlich fehlt mir etwas Grundlegendes. Wie schreibe ich meinen Code, um dies zu überwinden?
Mein VB-Code:
Public Class Bar
Implements IDisposable
Private Foo As SomeDisposableThing
Public Sub New()
Foo = New SomeDisposableThing() With {.name = "hello"}
End Sub
'''' snip ''''
Private disposedValue As Boolean = False ' To detect redundant calls '
Protected Overridable Sub Dispose(ByVal disposing As Boolean)
If Not Me.disposedValue Then
If disposing Then
If Foo IsNot Nothing Then Foo.Dispose()
End If
End If
Me.disposedValue = True
End Sub
Public Sub Dispose() Implements IDisposable.Dispose
Dispose(True)
GC.SuppressFinalize(Me)
End Sub
End Class
Yuck initialisieren. Nachricht: Verwenden Sie keine Eigenschaft :( –
@Hans, ich denke, es wird das gleiche Verhalten haben, auch wenn es ein Feld ist. Jede Zeile kann möglicherweise eine Ausnahme ('ThreadAbort' zum Beispiel), so würde ich * raten, dass FxCop Ich warte gleichermaßen für Felder und Eigenschaften hier. Habe diese Theorie noch nicht getestet. – JaredPar
Es tut nicht, ich versuchte. –