Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> События 
:(
    Опции темы
penguin
Дата 30.5.2006, 11:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 17.1.2006

Репутация: нет
Всего: нет



Есть универсальный класс, который имеет некоторое событие.  Мы подключаемся к этому событию, и семантика предметной области предполагает чтобы именно этот класс отвечал за освобождение всех своих ресурсов, при этом я внутри класса не представляю какие делегаты к его событию подключили!!!! Выход один, не делать с событием ничего при етом я боюсь что объекты могут просто повиснут в памяти, и память под них, не будет освобождена сборщиком мусора, или создавать дополнительные делегаты или что нибудь есче, при етом я получаю усложнение интерфейса класса, что не желательно. Что делать? Зарание спасибо!!!! 
PM MAIL   Вверх
mr.DUDA
Дата 30.5.2006, 12:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Каждый объект, подписавшийся на событие, должен от него отписаться - тогда ссылок не останется (например, реализовать в классе-подписчике интерфейс IDisposable и в Dispose() отписываться от всех событий, на которые подписан объект). Класс, публикующий событие, не ответствен за отписку обработчиков от события.  


--------------------
user posted image
PM MAIL WWW   Вверх
VisualProgrammerNET
Дата 30.5.2006, 16:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Почётный халявщик
**


Профиль
Группа: Участник
Сообщений: 461
Регистрация: 30.10.2005
Где: Зеленоград

Репутация: 4
Всего: 6



У меня вот такой вопрос. Зачем вообще нужны события? Ведь можно же всё заменить обычными методами и условиями. Типа if (something == 0) DoThis(). Скорее всего, я чего-то недопонимаю... можно какой-нибудь примерчик, где НЕЛЬЗЯ обойтись без события? 


--------------------
3 ГОДА НА user posted image 
PM MAIL ICQ   Вверх
ivashkanet
Дата 30.5.2006, 16:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 47
Всего: 149



Цитата(VisualProgrammerNET @  30.5.2006,  16:35 Найти цитируемый пост)
something == 0

а как ты узнаешь, что something изменилось??? Вот для этого и существуют события 
PM MAIL WWW ICQ   Вверх
VisualProgrammerNET
Дата 30.5.2006, 16:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Почётный халявщик
**


Профиль
Группа: Участник
Сообщений: 461
Регистрация: 30.10.2005
Где: Зеленоград

Репутация: 4
Всего: 6



Ну есть класс, где есть метод, изменяющий something.
Код

void Method()
{
something--;
if (somtehing == 0)
DoThis()
}

voila! 


--------------------
3 ГОДА НА user posted image 
PM MAIL ICQ   Вверх
ivashkanet
Дата 30.5.2006, 16:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 47
Всего: 149



Цитата(VisualProgrammerNET @  30.5.2006,  16:35 Найти цитируемый пост)
Скорее всего, я чего-то недопонимаю...

Очень сильно не допонимаешь.
События вызываются кодом 
Код

EventArgs e = new EventArgs();
OnMouseClick(e);

После этого все подпищики получают сообщение о клике мыши, с аргументами в скобках

Добавлено @ 16:52 
Цитата(VisualProgrammerNET @  30.5.2006,  16:48 Найти цитируемый пост)
voila! 

А как ты узнаешь, что мыша кликнулась? 
PM MAIL WWW ICQ   Вверх
mr.DUDA
Дата 30.5.2006, 17:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



VisualProgrammerNET, класс который публикует событие, не знает о том, кто будет обрабатывать это событие. То есть, твой "if" будет в одном месте (у публикующего объекта), а "DoThis" - в другом (у обрабатывающего). Кроме того, на событие можно подписываться и отписываться в рантайме, а твой код - жёстко фиксирован. 


--------------------
user posted image
PM MAIL WWW   Вверх
penguin
Дата 30.5.2006, 17:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 17.1.2006

Репутация: нет
Всего: нет



Цитата

Каждый объект, подписавшийся на событие, должен от него отписаться - тогда ссылок не останется (например, реализовать в классе-подписчике интерфейс IDisposable и в Dispose() отписываться от всех событий, на которые подписан объект). Класс, публикующий событие, не ответствен за отписку обработчиков от события.   

Ну в принципе понятно. Просто хотелось как по красивее, не вводя дополнительных переменных, придется оставить как было. 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0822 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.