Dispose Pattern и .NET
От: Denis2005 Россия  
Дата: 26.03.07 18:33
Оценка:
Очень простой философский вопрос …
Почему не запрещено (на этапе компиляции), создание экземпляра класса
реализующего интерфейс IDisposable, вне конструкции using?

Примеры:

// 1. ссылка не стеке (контролируем); ОК
using(StreamReader sr = new StreamReader(...)) 
        return sr.ReadToEnd();

// 2. ссылка не стеке (контролируем); FAIL
StreamReader sr = new StreamReader(...);
return sr.ReadToEnd();

// 3. ссылка в упр. куче (неконтролируем); OK
StreamReader[] arr = new StreamReader[10];
for(int i = 0; i < 10; i++)
        arr[i] = new StreamReader(...);

// 4. странный пример, возможно ислючение из общего 
// правила контроля ссылок на стеке; OK
object o = new StreamReader(...);


Накладные расходы не велики, и уберегает начинающих программистов,
от множества проблем связанных, например, с некорректным освобождением ресурсов
(в случае RAII).
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.