.NET IDisposable Pattern подразумевает, что если вы напишите финализатор и реализуете IDisposable, то ваш финализатор должен явно вызвать Dispose. Это логично, и это то, что я всегда делал в редких ситуациях, когда гарантируется финализатор.
Однако, что произойдет, если я просто сделаю это:
class Foo : IDisposable
{
public void Dispose(){ CloseSomeHandle(); }
}
и не выполнять финализатор или что-то еще. Будет ли фреймворк вызывать метод Dispose для меня?
Да, я понимаю, что это звучит глупо, и вся логика подразумевает, что этого не произойдет, но у меня всегда было две вещи на затылке, которые заставили меня понять.
-
Кто-то несколько лет назад сказал мне, что на самом деле это сделает, и у этого человека был очень солидный послужной список "зная их материал".
-
Компилятор/фрейм делает другие "магические" вещи в зависимости от того, какие интерфейсы вы реализуете (например: foreach, методы расширения, сериализация на основе атрибутов и т.д.), поэтому имеет смысл, что это может быть "волшебным" тоже,
В то время как я прочитал много вещей об этом, и было много чего подразумевается, я никогда не мог найти окончательный ответ Да или Нет на этот вопрос.