2013-07-03 3 views
3

У меня есть событие, и я связываю с ним обработчик. Когда я пишу метод моего обработчика, как узнать, какие аргументы выполняет функция?Как узнать, какие аргументы имеют событие

пример:

// Add an event handler to be called whenever there is new color frame data 
      this.sensor.ColorFrameReady += this.SensorColorFrameReady; 
      this.sensor.AllFramesReady += this.AllFramesReady; 

    //handler 
    private void AllFramesReady(object sender, AllFramesReadyEventArgs allFramesReadyEventArgs) 
    { 


     throw new NotImplementedException(); 
    } 

Как я знаю, что аргументы моей функции являются object sender и все кадры, готовые аргами?

ответ

6

Вы просматриваете документацию для этого события. Он укажет, что делегат определяет это событие. Затем вы можете просмотреть документацию для этого делегата, чтобы узнать, какая подпись функции должна соответствовать делегату.

Или вы можете положиться на Visual Studio, чтобы сказать вам, а не искать его, что и делают большинство людей. (Наведите указатель мыши на событие, сообщите вам, что должен сделать делегат, или введите SomeEvent += на клавиатуре, и предложит вам создать новый заглушка обработчика событий соответствующей подписи.)

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

+0

Я попробовал позволить визуальной студии сделать это для него, но это не так. я пошел в документацию, но я не могу найти аргументы! вот ссылка http://msdn.microsoft.com/en-us/library/microsoft.kinect.kinectsensor.allframesready.aspx – virgula24

+0

также, если я пытаюсь изменить аргументы, визуальная студия дает мне ошибку, это единственная информация i может получить – virgula24

+0

@ virgula24 На этой странице указан тип делегата как «EventHandler ». Вы можете найти делегата EventHandler для получения дополнительной информации. В этом случае это общий делегат, первым параметром которого является объект, а второй параметр - тип общего аргумента, который является 'AllFramesReadyEventArgs', так что это второй параметр. Вы не можете изменить подпись; он должен соответствовать событию, для которого он предназначен. – Servy

1

В Visual Studio: щелкните правой кнопкой мыши по имени события -> Перейти к определению. Это приведет вас к событию. Щелкните правой кнопкой мыши имя класса обработчика -> Перейти к определению. Это приведет вас к определению делегата, который дает вам вашу подпись метода.

Это может зависеть от настроек вашей Visual Studio.

+0

это сработало тоже !! благодаря! – virgula24

1

Событие имеет тип делегата. Тип делегата определяет подпись метода обработчика. Поэтому найдите тип делегата события, и вы найдете нужную подпись.

4

Ручной способ сделать это в Visual Studio - это ввести this.sensor.ColorFrameReady +=, а затем дважды нажать Tab, чтобы узнать, что такое реализация по умолчанию. Сделайте это аналогично для любых других событий/делегатов, для которых вы хотите увидеть подпись.

Выполнение этого не требует, чтобы у вас был исходный код события и делегата (которого у вас может не быть).

В мои годы кодирования на C# я никогда не нашел лучшего способа сделать это. (Я на самом деле не смотрел для решения, но нет никакого очевидного.)

+0

Большое спасибо, это сработало. Если я попытался ввести this.SensorColorFrameReady; (без существующей функции) и позволяя визуальной студии автоматически генерировать, это не сработало бы! – virgula24

+0

@ virgula24 Уверен, что может. Если вы набрали это, вы можете щелкнуть правой кнопкой мыши -> сгенерировать -> метод stub – Servy

+0

@ virgula24 Если мой ответ вам помог, пожалуйста, отметьте его как правильный ответ. – Jashaszun

Смежные вопросы