У меня есть класс, реализующий IDisposable, потому что у него есть закрытое поле члена «foo», которое является IDisposable (которое инициализируется в конструкторе). Я неожиданно получаю ошибку анализа кода CA2000, которая требует, чтобы я обязательно избавился от foo. Однако у меня в классе есть foo.Dispose () ' s Код Dispose (), который позаботится об этом.
Я немного поискал и, к удивлению, не нашел ответа. Что я делаю неправильно? Ясно, что мне не хватает чего-то базового. Как мне написать свой код, чтобы преодолеть это?
Мой код 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