Если возможно, позвоните по номеру .Dispose
для того же экземпляра IDisposable
несколько раз, не выбрасывая исключение? Есть ли какое-то определение для этого?Возможно, удастся использовать один и тот же экземпляр несколько раз
Например:
public class Test : IDisposable
{
public void Dispose()
{
// What ever
}
}
var t = Test();
t.Dispose();
t.Dispose(); // Should this work in any case?
Причина, почему я спрашиваю это:
Я создал некоторый механизм, который поиска в VisualTree
для элементов, которые наследуют от IDisposable
, но я могу не уверен, что один из этих элементов будет удален раньше.
Некоторые код надрезается из оконного класса
/// <summary>
/// Dispose
/// </summary>
public void DisposeAll()
{
foreach (var obj in WPFVisualTreeHelper.FindChildren<IDisposable>(this))
{
if (!disposables.Contains(obj))
{
disposables.Add(obj);
}
}
foreach (IDisposable disposable in disposables)
{
disposable.Dispose();
}
}
Спасибо!
IIRC руководящие принципы для IDisposable состояния, что несколько вызовов 'Dispose' не должны выбрасывать. Я посмотрю, смогу ли найти ссылку. – spender
О, тианкс, это было бы хорошо! – BendEg
Кстати, если вы не [делаете свои классы «запечатаны»] (http://stackoverflow.com/questions/11024336/why-does-sealed-affect-the-implementation-of-idisposable), тогда вы должны реализовать полный [основной шаблон размещения] (https://msdn.microsoft.com/en-us/library/b1yfkh5e%28v=vs.110%29.aspx#basic_pattern) (так что 'Dispose' не прерывается, когда класс). – spender