![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| Vit |
|
||||
![]() Vitaly Nevzorov ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 10964 Регистрация: 25.3.2002 Где: Chicago Репутация: 1 Всего: 207 |
Извиняюсь, но у меня наследие в ввиде многолетнего програмирования на Дельфи, поэтому приходится искать некоторые конструкции, которые привычны в Дельфи, но отсуствуют или как-то по другому реализованы в C#.
Вот такая вот проблема, на Дельфи пишу следующий код:
Теперь допустим я это делаю на c#:
проблема в том что return как я понял прекращает дальнейшее выполнение функции, но мне надо ещё кое-что сделать, например закрыть коннект к базе данных, после чего значение query я уже указать в return не могу. Выход конечно понятен - создать локальную переменную, но это лишняя строчка кода, которая какая-то лишняя получается. Может есть какой-то другой выход? -------------------- With the best wishes, Vit I have done so much with so little for so long that I am now qualified to do anything with nothing Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru |
||||
|
|||||
| Hurricane |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 126 Регистрация: 10.4.2007 Репутация: 3 Всего: 9 |
Сохраняешь в временную переменную и возвращаешь ее.
|
|||
|
||||
| Vit |
|
|||
![]() Vitaly Nevzorov ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 10964 Регистрация: 25.3.2002 Где: Chicago Репутация: 1 Всего: 207 |
другими словами без дополнительной переменной не обойтись... А если возвращается тип объект? Тут компиллятор начинает ругаться дурным голосом что не может вернуть локально объявленный объект...
-------------------- With the best wishes, Vit I have done so much with so little for so long that I am now qualified to do anything with nothing Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru |
|||
|
||||
| Hurricane |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 126 Регистрация: 10.4.2007 Репутация: 3 Всего: 9 |
Наверно, я сейчас скажу что-то не то, но видимо надо создать копию объекта:
|
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
try..finally для этого и придуман.
-------------------- ![]() |
|||
|
||||
| Дрон |
|
|||
![]() Java-ненавистник :) ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3179 Регистрация: 29.12.2002 Где: Санкт-Петербург Репутация: 24 Всего: 93 |
Vit, реализуй для Query (если это твой класс, а если не твой -- то есть шанс, что он уже реализован) интерфейс IDisposable с методом Dispose вызывающим Close и тогда можно будет записывать так:
Это полностью аналогично тому, что привёл mr.DUDA, но просто более удобная запись. Это сообщение отредактировал(а) Дрон - 15.4.2007, 10:06 -------------------- Да. Именно так. |
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
Забыл про юзинг, этот вариант действительно удобнее (при условии что объект реализует IDisposable)
-------------------- ![]() |
|||
|
||||
| Vit |
|
|||
![]() Vitaly Nevzorov ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 10964 Регистрация: 25.3.2002 Где: Chicago Репутация: 1 Всего: 207 |
Всем спасибо!
Пока до этой конструкции ещё не дошёл, и она для меня непонятна, но в будущем обязательно посмотрю, мне к сожалению уже далеко не 20 лет, и изучение нового материала даётся с значительным трудом. -------------------- With the best wishes, Vit I have done so much with so little for so long that I am now qualified to do anything with nothing Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru |
|||
|
||||
| Exception |
|
||||||||||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 4525 Регистрация: 26.12.2004 Репутация: 29 Всего: 186 |
Интерфейс IDisposable предназначен для реализации объектом поведения "мне нужно освободить ресурсы". Он становится необходим, так как финалайзеры в .NET (что-то вроде деструкторов C++) выполняются только при сборке мусора, то бишь фиг знает когда. Если же класс реализует IDisposable, это "говорит" его клиентам, что после использования его объектов нужно вызвать единственный метод этого интерфейса -- Dispose ().
Использование объекта:
А что если во время работы с объектом произойдёт исключение? Тогда мы можем и не "добраться" до вызова Dispose (), то бишь не сможем освободить ресурсы! Это нехорошо, поэтому обернём наш код в конструкцию try-catch-finally:
Однако, есть конструкция using, которая делает то же самое, но более наглядно:
Разумеется, множество классов уже реализовали интерфейс IDisposable. Пример:
А тебе нужно вот что (как и сказал Дрон):
Это сообщение отредактировал(а) Exception - 15.4.2007, 21:52 |
||||||||||||
|
|||||||||||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
Exception, молодчаго !!!
Vit, не так всё потеряно, как может показаться, а твои скиллы в делфях лично для меня очень сильно прокачанные и некоторые статьи из Dephi FAQ много помогли, так что зря себя оговариваешь ! 20 и даже 30 - это не предел ! Спасибо что ты с нами - то бишь в разделе под дотнет, а не в жабистах. -------------------- ![]() |
|||
|
||||
| Vit |
|
|||
![]() Vitaly Nevzorov ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 10964 Регистрация: 25.3.2002 Где: Chicago Репутация: 1 Всего: 207 |
Я не оговариваю, к сожалению с возрастом значительно затрудняется изучение нового материала, это вполне объективный показатель. Естественно что опыт в Дельфи и в базах данных помогает, без него я бы вообще не смог ничего выучить, но восприятие нового это не сильно ускоряет. мне уже почти 40...
Нет, токо не джаба... мне с ними не попути... -------------------- With the best wishes, Vit I have done so much with so little for so long that I am now qualified to do anything with nothing Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru |
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |