Одноразовые с использованием шаблона

  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(). Вы должны сделать то же самое.