Это зависит от того, что вы имеете в виду под этим:
бы, то значит, что мой объект не получил бы утилизировать?
Ваш объект был Dispose
призвал его, в противном случае он бы не достиг StreamWriter
кода. Возможно, что вызов Dispose
не завершен, но не похоже, что на объекте есть какой-то волшебный флаг, говорящий «расположен или не расположен».
Обратите внимание, что удаление логически отделить от сбора мусора и завершения: ваш объект будет все еще иметь право на сбор мусора точно так же, как обычно (если нет живых ссылок), и если у вас есть финализации (почти наверняка не очень хорошая идея), он все равно будет вызван, если вы его не подавили.
Важно понимать, что хотя C# поддерживает IDisposable
на уровне языка, CLR действительно не заботится об этом. Это просто другой интерфейс, и Dispose
- это еще один метод.
В общем, это плохая идея для Dispose
, чтобы выбросить исключение (как если бы объект был удален как часть очистки существующей неудачной операции, вы теряете исходное исключение), но это не приведет к фундаментальному повреждению CLR каким-то образом.
Я не уверен в этом ответе на сообщение в поле ответов, но я считаю, что ваш объект все равно будет размещен, как и любой управляемый объект, просто остальная часть вашего метод dispose не будет работать. –
чего вы пытаетесь достичь? Dispose/IDisposable используется для освобождения неуправляемых ресурсов, отсутствующих в методе Dispose. Выполняется только ведение журнала – Tilak
Это всего лишь пример случая, когда ошибка может возникнуть внутри Dispose, и именно так мне задавали вопрос в интервью, поэтому, как я опубликовал его. – Richard