C #: «использовать» при создании экземпляра формы? - PullRequest
11 голосов
/ 15 октября 2010

Я смотрю на код C #, написанный кем-то другим. Всякий раз, когда форма создается и затем показывается, выполняется следующее. Это правильно? Почему вы используете «использование» в этом контексте?

MyForm f;
using (f = new MyForm())
{
    f.ShowDialog();
}

Дополнительный вопрос:

Можно ли заменить следующий код?

using (MyForm f = new MyForm())
{
    f.ShowDialog();
}

Ответы [ 4 ]

12 голосов
/ 15 октября 2010

A Form в WinForms реализует шаблон IDisposable (он наследует IDisposable от Component. Оригинальный автор правильно гарантирует, что значение будет удалено с помощью оператора using.

3 голосов
/ 15 октября 2010

Возможно. Если MyForm реализует IDisposable, это гарантирует, что метод Dispose вызывается, если в вызове ShowDialog выбрасывается исключение.

В противном случае использование не является необходимым, если вы не хотите немедленно принудительно утилизировать

3 голосов
/ 15 октября 2010

Это ограничивает ресурсы, удерживаемые объектом MyForm f, блоком using.Его метод Dispose будет вызываться при выходе из блока, и он гарантированно будет «утилизирован» в это время.Поэтому любые имеющиеся у него ресурсы будут детерминированно очищены.Кроме того, f нельзя изменить, чтобы ссылаться на другой объект в блоке using.Для получения дополнительной информации см. Информацию об использовании в MSDN:

использование в C # Reference

0 голосов
/ 15 октября 2010

Да, это «правильное» использование IDisposable. Возможно, у автора MyForm был какой-то большой объект (скажем, большой MemoryStream) или файловый ресурс (например, открытый FileStream), который он открыл и хотел убедиться, что он выпущен как можно скорее. В этом случае было бы полезно вызвать ctor MyForm внутри оператора using.

Вопрос 2:

в C # 3.0+ вы можете использовать более короткое (и столь же понятное):

с использованием ( var f = new MyForm ())

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...