![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| DenWPF |
|
||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1659 Регистрация: 26.9.2009 Репутация: нет Всего: 1 |
Эти два кода одинаковые?
Как правильней писать? finally:
using:
|
||||
|
|||||
| Экскалупатор |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1746 Регистрация: 1.4.2009 Где: г. Минск Репутация: 5 Всего: 24 |
нет не одинаковый. finally гарантирует что код внутри этого блока будет выполнен даже если будет ошибка. при этом объект класса не уничтожается, т.е. после этого блока форму можно показать еще раз. а вот в блок using уничтожает все что было в нем создано и все это становиться недоступным вне его. т.е. форму второй раз уже не вызовешь, придется создавать новую.
первый пример в данном случае не имеет смысла, блок finally используется(обычно) для освобождения ресурсов(закрыть соединение с базой, закрыть поток и пр.). а второй тоже ничего особого не добавляет. GC все равно все уберет когда будет нужно. обычно этот блок используют когда нужно что бы ресурс освобождался сразу после окончания блока. но форма, как мне кажется, таким ресурсом не является. Добавлено через 2 минуты и 6 секунд *к тому же на сколько я понимаю к моменту выполнения блока finally форма уже будет закрыта, так что смысла в нем совсем не вижу, только если в этой форме отключена кнопка закрытия и форма будет закрываться как то подругому... |
|||
|
||||
| DenWPF |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1659 Регистрация: 26.9.2009 Репутация: нет Всего: 1 |
ShowDialog - может вызвать исключения, значит надо сделать так
|
|||
|
||||
| wester |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 675 Регистрация: 27.2.2009 Репутация: 3 Всего: 13 |
DenWPF,
Стремись к тому, что бы код не создавал исключительных ситуаций пример из msdn http://msdn.microsoft.com/ru-ru/library/c7ykbedk.aspx Это сообщение отредактировал(а) wester - 17.4.2011, 01:01 |
|||
|
||||
| Экскалупатор |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1746 Регистрация: 1.4.2009 Где: г. Минск Репутация: 5 Всего: 24 |
сам метод может вызвать исключение или код внутри формы? если второе то не лучше ли использовать блок try-catch внутри формы?а уже внутри можно сделать блок finally который будет закрывать форму и возвращать какое то значение, типа DialogResult.No. вообще оборачивать в подобные блоки весь код какого класса(имеется ввиду в один блок весь код), на мой взгляд, не совсем удачная идея. могут возникнуть вопросы при отладке, потому что этот блок будет ловить все исключения и ты можешь пропустить что то важно. лучше оборачивать те места которые могут вызвать исключение. пусть класс сам обрабатывает свои исключительные ситуации. а в твоем примере достаточно простого:
|
|||
|
||||
| DenWPF |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1659 Регистрация: 26.9.2009 Репутация: нет Всего: 1 |
В описании у ShowDialog() есть два исключения, меня интересуют они. Да, я знаю что лучше код в форме обрабатывать там.
|
|||
|
||||
| Экскалупатор |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1746 Регистрация: 1.4.2009 Где: г. Минск Репутация: 5 Всего: 24 |
ну в таком случае конечно, но тогда желательно ловить конкретные исключения, а не все. т.е. нужно указать в блоке Catch какой тип исключения ему обрабатывать. в итоге у тебя должно получиться три Catch(один без параметров, что бы таки ловил все что не отловят другие...), но необходимости в Finally я все равно не вижу, потому как ресурсы освобождать не требуется.
p.s. исходя из описаний исключений этого метода, мало вероятно что ты запустишь только что созданный экземпляр окна дважды или что ты ее отключил. но дело твое. |
|||
|
||||
| DenWPF |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1659 Регистрация: 26.9.2009 Репутация: нет Всего: 1 |
я там с аргументами не понял, какая ошибка в каких аргументах может быть?
|
|||
|
||||
| Экскалупатор |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1746 Регистрация: 1.4.2009 Где: г. Минск Репутация: 5 Всего: 24 |
ты о чем? поподробнее? я имел ввиду вот это:
|
||||
|
|||||
| DenWPF |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1659 Регистрация: 26.9.2009 Репутация: нет Всего: 1 |
да, там ещё ошибка аргумента есть..
|
|||
|
||||
| Экскалупатор |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1746 Регистрация: 1.4.2009 Где: г. Минск Репутация: 5 Всего: 24 |
ммм, форму делаешь ты? как в ней может быть три значения? но в любом случае просто можно добавить еще один Catch
|
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | .NET для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |