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