Делегаты и события - PullRequest
       11

Делегаты и события

1 голос
/ 23 августа 2009

Я использую их для «связи» между различными объектами, как шаблон издателя и подписчика.

В некоторых примерах я вижу, что иногда событие объявляется как статическое, а иногда нет:

public delegate void LogProgress(string str)
public static event LogProgress LogProgressEvent;


 if (LogProgressEvent != null)
                LogProgressEvent(tempString);

Почему и когда мне нужно использовать статический?

Ответы [ 2 ]

8 голосов
/ 23 августа 2009

Статические события на самом деле довольно опасны, и (к счастью) также довольно редки. Как и со всем статичным, вы будете использовать его, когда он применяется к типу, а не к какому-либо конкретному экземпляру. И даже в этом случае вы можете увидеть его на единичном экземпляре, а не как статическое событие.

Опасность заключается в том, что нелепо легко забыть отказаться от подписки, и в конечном итоге массы объектов будут жить вечно; в отличие от большинства событий, основанных на экземплярах - обычно экземпляр в конечном итоге выходит за пределы области действия, что делает делегаты коллекционируемыми (экземпляр делегата будет поддерживать целевой экземпляр живым).

0 голосов
/ 23 августа 2009

static применяется к событиям не отличается от применения static к любому другому полю C #.

статические события доступны вызывающим в любое время, даже если не существует экземпляра класса. Я думаю, если вы хотите вызывать события из статического метода, статические события будут полезны

См. Последствия использования статических событий в Марк ответ

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...