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