2016-03-03 5 views
0

Я использую Visual Studio 2013. Если у меня есть вызов метода, как это:«Перейти к определению» для событий

CallMe(); 

Я могу правой кнопкой мыши на нем и выберите «Перейти к определению», чтобы увидеть тело этого метода.

Но если у меня есть событие, как это:

Called(sender, new EventArgs()); 

правой кнопкой мыши на этом и выберите «Перейти к определению» заберет меня к объявлению события, но не к телу.

Как найти тело для этого мероприятия?

+0

Похоже, вы пытаетесь воссоздать ['INotifyPropertyChanged'] (https://msdn.microsoft.com/library/ms229614 (v = vs.100) .aspx). Возможно, причина в том, что событие равно null, потому что у вас нет подписчиков, потому что они ожидают фактического 'INotifyPropertyChanged', а не вашей повторной реализации. –

ответ

3

событие не имеет «тело» - это событие имеет абонентов, что уведомление, когда происходит событие и выполнить обработчик событий . По дизайну мероприятие не знает, кто его подписчики, и не требуется наличие каких-либо подписчиков. Таким образом, полное определение события содержится в его объявлении.

Visual Studio не имеет встроенной поддержки для поиска всех подписчиков события. Лучшее, что вы можете сделать, это использовать команду «Найти все ссылки», чтобы найти каждое место, которое подписчик подключает к событию.

+1

@ dbnex14 Если ничто не подписалось на это событие, оно будет равно null. (Событие действительно просто обертка для делегата многоадресной рассылки, поэтому, если нет подписчиков, делегат имеет значение NULL.) Это звучит для меня как некоторое дополнительное чтение на [делегатах] (https://msdn.microsoft.com/en -us/library/ms173171.aspx) и [события] (https://msdn.microsoft.com/en-us/library/awbftdfh.aspx) могут быть вам полезны. –

+0

Спасибо @BJMyers. Я сделаю чтение и отправлю свое обновление как отдельный вопрос, так как вы уже ответили на мой первоначальный вопрос. Очень признателен. – pixel