Одноразовые с использованием шаблона
using (FileStream fileStream = new FileStream(path))
{
// do something
}
Теперь я знаю, что используемый шаблон представляет собой реализацию IDisposable, а именно, что Try/Catch/Finally настроен, и Dispose вызывается на объект. Мой вопрос в том, как обрабатывается метод Close.
MSDN говорит, что он не вызывается, но я читал иначе.
Я знаю, что FileStream наследуется от Stream, который объясняется здесь. Теперь, когда говорится не отменять Close(), потому что он вызывается Dispose().
Итак, некоторые классы просто вызывают метод Close() в методах Dispose() или используют вызов Close()?
Ответы
Ответ 1
Оператор using
знает только о Dispose()
, но Stream.Dispose
вызывает Close()
, поскольку задокументирован в MSDN:
Обратите внимание, что из-за отставания совместимости реализация метода отличается от рекомендуемое руководство для Утилизируйте шаблон. Этот метод вызывает Закрыть, которое затем вызывает Stream.Dispose(Boolean).
Ответ 2
используя только вызовы Dispose(). Метод Dispose() может вызвать Close(), если это так, как оно реализовано.
Ответ 3
Close() не является частью интерфейса IDisposable, поэтому использование не имеет способа узнать, должно ли оно быть вызвано или нет. использование вызовет только Dispose(), но интеллектуально спроектированные объекты закроются в методе Dispose().
Ответ 4
Я не думаю, что при использовании вызовов Close() он не мог бы знать, что он должен назвать эту конкретную функцию. Поэтому он должен вызывать dispose и, в свою очередь, вызывает закрытие.
Ответ 5
В .Net классы Close() call Dispose(). Вы должны сделать то же самое.