Как расположить список доступных объектов?

Я реализую IDisposable для класса и при расположении существует внутренний список доступных объектов. Если я располагаю, они возражают цикличным выполнением через них.

public Class MyDisposable 
     Implements IDisposable 
     private _disposbaleObjects as new List(of OtherDisposables)

     Public Overloads Sub Dispose() Implements System.IDisposable.Dispose
         Dispose(True)
         GC.SuppressFinalize(Me)
    End Sub

    Protected Overridable Sub Dispose(ByVal disposing As Boolean)
        If Not Me.disposedValue Then
            If disposing Then
                  ? Should I dispose the the list like this ?
                  For Each obj In _disposbaleObjects
                      obj.dispose()
                  Next 
            End If               
        End If
        Me.disposedValue = True
    End Sub

End Class
8
задан abatishchev 17 July 2014 в 22:25
поделиться

3 ответа

Да, перебрать список и удалить каждый элемент.

Также вы можете написать метод расширения:

public static void Dispose(this IEnumerable<IDisposable> collection)
{
    foreach (IDisposable item in collection)
    {
        if (item != null)
        {
            try
            {
                item.Dispose();
            }
            catch (Exception)
            {
                // log exception and continue
            }
    }
}

и вызвать его для своего списка

_disposbaleObjects.Dispose()
12
ответ дан 5 December 2019 в 11:22
поделиться

Кто создает объекты внутри списка? Т.е. кто отвечает за их жизненный цикл? Если MyDisposable создает их, то он несет ответственность за их утилизацию. Если их создает кто-то другой, то утилизация может оставить его со ссылкой на бесполезный объект.

2
ответ дан 5 December 2019 в 11:22
поделиться

Да, вам нужно явно удалить каждый из этих объектов, именно так, как вы это делаете сейчас.

1
ответ дан 5 December 2019 в 11:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: