Как компилятор генерирует код обработчика событий? - PullRequest
0 голосов
/ 29 августа 2009

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

У меня вопрос: какой код генерирует компилятор, когда мы назначаем обработчик событий через IDE?

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

Я знаю, что мы можем написать обработчик событий, например, мой обработчик событий, который я пишу здесь:

SearchControl.SearchChangedEvent += new RoutedEventHandler(SearchControl_SearchChanged);

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

РЕДАКТИРОВАТЬ: Решение.

Я обнаружил проблемную область, в которой я запутался в этой статье: http://msdn.microsoft.com/hi-in/magazine/cc785480%28en-us%29.aspx

В разделе «Обзор перенаправленных событий» автор пишет:

Чтобы увидеть это, перейдите в конструктор для ваш класс, щелкните правой кнопкой мыши на Вызов метода InitializeComponent и выберите Перейти к определению из контекстное меню. Редактор отобразит файл сгенерированного кода (с именованием соглашение .i.g.cs или .i.g.vb) содержащий код, который обычно генерируется во время компиляции.

Я нашел код сгенерированный !!

#line 6 "..\..\Window1.xaml"
this.myButton.Click += 
  new System.Windows.RoutedEventHandler(
  this.myButton_Click);

Спасибо за тех, кого немного смутило постановка задачи. Надеюсь, теперь это проясняется (похоже, я не мог объяснить проблему, пока не нашел решение:)

1 Ответ

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

Вы полностью описали свою функцию SearchControl_SearchChanged в ту секунду, когда передавали ее делегату в качестве параметра RoutedEventHandler. Начиная с MSDN , делегат принимает 2 параметра: object и RoutedEventArgs и возвращает void. Это то, что IDE использует для автоматического создания заголовка функции SearchControl_SearchChanged.

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