Как получить количество подписчиков событий в блоках добавления и удаления?
Если я использую явный синтаксис для объявления события, можно ли получить количество подписчиков внутри то
add {}
и remove {}
кодовые блоки? Например:public event EventHandler MyEvent { add { MyEvent += value; // Can I get a count of subscribers here? } remove { MyEvent -= value; // And also here? } }
Что я уже пробовал:
Я нашел способ сделать это в других частях кода, используя...
MyEvent.GetInvocationList().Count
..но я не могу понять, как и даже если этот синтаксис может быть использован внутри кода объявления события.
Richard MacCutchan
Что происходит, когда вы пытаетесь это сделать?
Patrick Skelton
Он не будет компилироваться. Он говорит что-то вроде " MyEvent может появиться только с левой стороны += или -=".
Bernhard Hiller
А как насчет этого?GetInvocationList ()?
Patrick Skelton
Ключевое слово "this", по-видимому, относится к заключающему классу, поэтому я получаю сообщение о том, что класс не содержит метода GetInvocationList().
Я предполагаю, что, возможно, это невозможно, потому что то, что я пытаюсь сделать, - это получить ссылку на экземпляр класса, который компилятор C# генерирует автоматически в ответ на ключевое слово "событие".
Tomas Takac
Почему? Каков ваш вариант использования? Я не думаю, что вы можете сделать это изнутри Add/remove accessors. Если у вас есть пользовательские методы доступа, вы можете иметь счетчик, который вы увеличиваете или уменьшаете при добавлении/удалении. Или вы можете отбросить пользовательские методы доступа и получить счетчик с помощью GetInvocationList() в любом месте вашего класса. Все зависит от того, чего вы пытаетесь достичь.
Patrick Skelton
Я просто пытаюсь зарегистрировать количество в отладочной сборке, чтобы следить за потенциальными утечками памяти. Я буду использовать отдельную переменную count, как вы предлагаете. Тем не менее, кажется постыдным вводить переменную и связанный с ней код, который будет существовать только в отладочной сборке и поэтому должен быть завернут в #if DEBUG ... #за endif.
Спасибо всем.
Tomas Takac
Посмотрите на решение №2. Думаю, это решит вашу проблему.