Я реализую 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
Да, перебрать список и удалить каждый элемент.
Также вы можете написать метод расширения:
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()
Кто создает объекты внутри списка? Т.е. кто отвечает за их жизненный цикл? Если MyDisposable
создает их, то он несет ответственность за их утилизацию. Если их создает кто-то другой, то утилизация может оставить его со ссылкой на бесполезный объект.
Да, вам нужно явно удалить каждый из этих объектов, именно так, как вы это делаете сейчас.