Шаблон .NET IDisposable передбачає, що якщо ви пишете фіналізатор і реалізуєте IDisposable, ваш фіналізатор повинен явно викликати розпорядження. Це логічно, і це я завжди робив у рідкісних ситуаціях, коли фіналізатор є гарантованим.
Однак, що станеться, якщо я просто це роблю:
class Foo : IDisposable
{
public void Dispose(){ CloseSomeHandle(); }
}
і не застосовувати фіналізатор, або що-небудь інше. Чи буде рамка викликати метод Dispose для мене?
Так, я розумію, що це звучить нерозумно, і вся логіка передбачає, що це не буде, але у мене завжди було 2 речі на задній частині голови, які робили мене впевненим.
Хтось кілька років тому одного разу сказав мені, що насправді це зробить, і ця людина мала дуже солідний досвід "знання своїх речей".
Компілятор / фреймворк робить інші "магічні" речі залежно від того, які інтерфейси ви реалізуєте (наприклад: foreach, методи розширення, серіалізація на основі атрибутів тощо), тому має сенс, що це може бути і "магічним".
Хоча я читав про нього багато речей, і мається на увазі багато речей, я ніколи не зміг знайти остаточного відповіді " Так" чи "ні" на це питання.