![]() |
Модераторы: Partizan, gambit |
![]() ![]() ![]() |
|
penguin |
|
|||
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 17.1.2006 Репутация: нет Всего: нет |
Есть универсальный класс, который имеет некоторое событие. Мы подключаемся к этому событию, и семантика предметной области предполагает чтобы именно этот класс отвечал за освобождение всех своих ресурсов, при этом я внутри класса не представляю какие делегаты к его событию подключили!!!! Выход один, не делать с событием ничего при етом я боюсь что объекты могут просто повиснут в памяти, и память под них, не будет освобождена сборщиком мусора, или создавать дополнительные делегаты или что нибудь есче, при етом я получаю усложнение интерфейса класса, что не желательно. Что делать? Зарание спасибо!!!!
|
|||
|
||||
mr.DUDA |
|
|||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
Каждый объект, подписавшийся на событие, должен от него отписаться - тогда ссылок не останется (например, реализовать в классе-подписчике интерфейс IDisposable и в Dispose() отписываться от всех событий, на которые подписан объект). Класс, публикующий событие, не ответствен за отписку обработчиков от события.
-------------------- ![]() |
|||
|
||||
VisualProgrammerNET |
|
|||
![]() Почётный халявщик ![]() ![]() Профиль Группа: Участник Сообщений: 461 Регистрация: 30.10.2005 Где: Зеленоград Репутация: 4 Всего: 6 |
У меня вот такой вопрос. Зачем вообще нужны события? Ведь можно же всё заменить обычными методами и условиями. Типа if (something == 0) DoThis(). Скорее всего, я чего-то недопонимаю... можно какой-нибудь примерчик, где НЕЛЬЗЯ обойтись без события?
-------------------- 3 ГОДА НА ![]() |
|||
|
||||
ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 47 Всего: 149 |
а как ты узнаешь, что something изменилось??? Вот для этого и существуют события |
|||
|
||||
VisualProgrammerNET |
|
|||
![]() Почётный халявщик ![]() ![]() Профиль Группа: Участник Сообщений: 461 Регистрация: 30.10.2005 Где: Зеленоград Репутация: 4 Всего: 6 |
Ну есть класс, где есть метод, изменяющий something.
voila! -------------------- 3 ГОДА НА ![]() |
|||
|
||||
ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 47 Всего: 149 |
Очень сильно не допонимаешь. События вызываются кодом
После этого все подпищики получают сообщение о клике мыши, с аргументами в скобках Добавлено @ 16:52 А как ты узнаешь, что мыша кликнулась? |
|||
|
||||
mr.DUDA |
|
|||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
VisualProgrammerNET, класс который публикует событие, не знает о том, кто будет обрабатывать это событие. То есть, твой "if" будет в одном месте (у публикующего объекта), а "DoThis" - в другом (у обрабатывающего). Кроме того, на событие можно подписываться и отписываться в рантайме, а твой код - жёстко фиксирован.
-------------------- ![]() |
|||
|
||||
penguin |
|
|||
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 17.1.2006 Репутация: нет Всего: нет |
Ну в принципе понятно. Просто хотелось как по красивее, не вводя дополнительных переменных, придется оставить как было. |
|||
|
||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |