Tengo una clase que implementa IDisposable porque tiene un campo miembro privado "foo" que es IDisposable (que se inicializa en el constructor). Estoy recibiendo inesperadamente un error de análisis de código CA2000, que quiere que me asegure de deshacerme de foo. Sin embargo, tengo foo.Dispose() en el código Dispose() de mi clase, que debería encargarse de esto.¿Por qué estoy recibiendo CA2000 con un miembro privado IDisposable dentro de mi clase IDisposable?
Realicé algunas búsquedas y, sorprendentemente, no puedo encontrar una respuesta. ¿Qué estoy haciendo mal? Claramente me falta algo básico. ¿Cómo escribo mi código para superar esto?
Mi código VB:
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. Mensaje: no use una propiedad :( –
@Hans, creo que tendrá el mismo comportamiento incluso si es un campo. Cualquier línea puede lanzar una excepción ('ThreadAbort', por ejemplo), así que * adivinaría * que FxCop advertiría igualmente para los campos y propiedades aquí. Sin embargo, aún no he probado esa teoría. – JaredPar
No, lo intenté. –