Почему я получаю CA2000 с закрытым членом IDisposable внутри моего класса IDisposable?

У меня есть класс, реализующий 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
7
задан Dominic Zukiewicz 28 February 2013 в 15:56
поделиться