Почему вы хотите инициализировать диалог с использованием статистики? - PullRequest
6 голосов
/ 01 апреля 2011

Я адаптирую руководство по стилю кодирования из этого источника: http://www.csharpfriends.com/articles/getarticle.aspx?articleid=336

В разделе «5.2 Инициализация» рекомендуется следующее:

Если вы инициализируете диалог, попробуйте использовать оператор использования:

использование (OpenFileDialog openFileDialog = новый OpenFileDialog ()) {}

Каковы причины такого выбора стиля?

Ответы [ 7 ]

4 голосов
/ 01 апреля 2011

Скорее всего, вам нужен диалог только для краткосрочного ввода. Таким образом, с помощью оператора using вы можете освободить ресурсы после того, как вы выполнили из них то, что вам нужно (утилизируйте его).

Использование является просто синтаксическим сахаром для вызова метода dispose после использования.

3 голосов
/ 02 апреля 2011

Это не лучший пример, OpenFileDialog уже удаляет все ресурсы, когда диалоговое окно закрывается. И это компонент, а не контроль. Это деталь реализации, хотя. В общем, вызов ShowDialog () делает , а не , автоматически удаляет объект формы. В отличие от Show (). Это необходимо для получения результатов диалога, не опасаясь исключения ObjectDisposedException. Теперь важно, чтобы вы сами этим распоряжались.

Что упрощает оператор , использующий .

3 голосов
/ 01 апреля 2011

OpenFileDialog реализует интерфейс IDisposable. Учитывая, что диалоги обычно имеют время жизни определенного метода, блок using гарантирует, что они будут правильно расположены

using (OpenFileDialog dialog = new OpenFileDialog()) {
  // Some setup work 
  ...
  return dialog.ShowDialog();
}
1 голос
/ 01 апреля 2011

Вы сделали бы это по той же причине, по которой вы использовали бы любую , используя конструкцию , которая должна гарантировать удаление объекта. OpenFileDialog реализует IDisposable, поэтому потребитель должен убедиться, что экземпляр удален, а конструкция using гарантирует, что .Dispose вызывается для объекта.

0 голосов
/ 02 апреля 2011

Одним из ключевых моментов, не упомянутых в других ответах, является то, что все диалоги всегда являются модальными, что означает, что в отличие от обычных форм, которые вы можете показывать, модальные диалоги будут блокировать выполнение до тех пор, пока форма не исчезнет.Это означает, что к тому времени, как выполнение вернется к вам после показа диалога, диалог уже исчез!Таким образом, уже настало время избавиться от него, поэтому рекомендуется использовать оператор usings.

0 голосов
/ 01 апреля 2011

Определение using

using: Определяет область, за пределами которой объект или объекты будут расположены.

Полагаю, определение говорит обо всем.

Для лучшего понимания прочитайте , используя Утверждение в msdn

, что-это-The-с-помощью-блок-и-почему-должен-я потребительной это

Узнать больше

0 голосов
/ 01 апреля 2011

Оператор using на языке c # позволяет определить область действия для времени жизни объекта.Этот оператор получает указанный ресурс, выполняет операторы и, наконец, вызывает метод Dispose () объекта для его очистки.

...