| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Общие вопросы по .NET и C# > События |
| Автор: penguin 30.5.2006, 11:37 |
| Есть универсальный класс, который имеет некоторое событие. Мы подключаемся к этому событию, и семантика предметной области предполагает чтобы именно этот класс отвечал за освобождение всех своих ресурсов, при этом я внутри класса не представляю какие делегаты к его событию подключили!!!! Выход один, не делать с событием ничего при етом я боюсь что объекты могут просто повиснут в памяти, и память под них, не будет освобождена сборщиком мусора, или создавать дополнительные делегаты или что нибудь есче, при етом я получаю усложнение интерфейса класса, что не желательно. Что делать? Зарание спасибо!!!! |
| Автор: mr.DUDA 30.5.2006, 12:37 |
| Каждый объект, подписавшийся на событие, должен от него отписаться - тогда ссылок не останется (например, реализовать в классе-подписчике интерфейс IDisposable и в Dispose() отписываться от всех событий, на которые подписан объект). Класс, публикующий событие, не ответствен за отписку обработчиков от события. |
| Автор: VisualProgrammerNET 30.5.2006, 16:35 |
| У меня вот такой вопрос. Зачем вообще нужны события? Ведь можно же всё заменить обычными методами и условиями. Типа if (something == 0) DoThis(). Скорее всего, я чего-то недопонимаю... можно какой-нибудь примерчик, где НЕЛЬЗЯ обойтись без события? |
| Автор: ivashkanet 30.5.2006, 16:39 |
а как ты узнаешь, что something изменилось??? Вот для этого и существуют события |
| Автор: VisualProgrammerNET 30.5.2006, 16:48 | ||
Ну есть класс, где есть метод, изменяющий something.
voila! |
| Автор: ivashkanet 30.5.2006, 16:50 | ||
Очень сильно не допонимаешь. События вызываются кодом
После этого все подпищики получают сообщение о клике мыши, с аргументами в скобках Добавлено @ 16:52 А как ты узнаешь, что мыша кликнулась? |
| Автор: mr.DUDA 30.5.2006, 17:03 |
| VisualProgrammerNET, класс который публикует событие, не знает о том, кто будет обрабатывать это событие. То есть, твой "if" будет в одном месте (у публикующего объекта), а "DoThis" - в другом (у обрабатывающего). Кроме того, на событие можно подписываться и отписываться в рантайме, а твой код - жёстко фиксирован. |
| Автор: penguin 30.5.2006, 17:34 | ||
Ну в принципе понятно. Просто хотелось как по красивее, не вводя дополнительных переменных, придется оставить как было. |