Ответ 1
A Form
в WinForms реализует шаблон IDisposable
(он наследует IDisposable
от Component
. Исходный автор правильно гарантирует, что значение будет выбрано с помощью оператора using
.
Я смотрю код С#, написанный кем-то другим. Всякий раз, когда форма создается, а затем отображается, выполняется следующее. Это верно? Почему вы используете "использование" в этом контексте?
MyForm f;
using (f = new MyForm())
{
f.ShowDialog();
}
Дополнительный вопрос:
Можно ли заменить следующий код?
using (MyForm f = new MyForm())
{
f.ShowDialog();
}
A Form
в WinForms реализует шаблон IDisposable
(он наследует IDisposable
от Component
. Исходный автор правильно гарантирует, что значение будет выбрано с помощью оператора using
.
Это ограничивает ресурсы, хранящиеся объектом myForm f, в блоке использования. Его метод Dispose будет вызываться, когда выйдет блок, и в это время он будет "удален". Поэтому любые ресурсы, которые он держит, будут детерминистически очищены. Кроме того, f не может быть изменен для ссылки на другой объект в блоке использования. Для получения дополнительной информации см. Информацию об использовании в MSDN:
Может быть. Если MyForm реализует IDisposable, это гарантирует, что вызывается метод Dispose, если в вызове ShowDialog вызывается исключение.
В противном случае использование не требуется, если вы не захотите немедленно принудительно удалить
Да, это "правильное" использование IDisposable. Возможно, у автора MyForm был какой-то большой объект (скажем, большой MemoryStream) или файловый ресурс (например, открытый FileStream), который он открывал, и хотел убедиться, что он был выпущен как можно скорее. В этом случае было бы полезно вызвать MyForm ctor внутри оператора using.
Вопрос 2:
в С# 3.0+, вы можете использовать более короткие (и точно так же ясно):
используя (var f = new MyForm())