Я хотел бы передать ссылку на метод в другой метод и сохранить ее как переменную. Позже я хотел бы использовать эту ссылку для определения обработчика событий.
При создании обработчика событий ссылка на метод передается следующим образом:
myButton.Click += new RoutedEventHandler(myButton_Click);
И если вы посмотрите на конструктор RoutedEventHandler из intelliSense, он будет выглядеть так:
RoutedEventHandler(void(object, RoutedEventArgs))
Я бы хотел передать метод myButton_Click другому статическому методу, а затем создать там обработчик событий. Как передать ссылку на статический метод? Я пробовал следующее, но он не компилируется:
public class EventBuilder
{
private static void(object, RoutedEventArgs) _buttonClickHandler;
public static void EventBuilder(void(object, RoutedEventArgs) buttonClickHandler)
{
_buttonClickHandler = buttonClickHandler;
}
public static void EnableClickEvent()
{
myButton.Click += new RoutedEventHandler(_buttonClickHandler);
}
}
Спасибо, Бен





пытаться
private static delegate void(object sender, RoutedEventArgs e) _buttonClickHandler;
Чтобы ссылаться на ссылку на метод (называемую делегировать в .NET), используйте имя обработчика, а не подпись.
public class EventBuilder
{
private static RoutedEventHandler _buttonClickHandler;
public EventBuilder(RoutedEventHandler buttonClickHandler)
{
_buttonClickHandler = buttonClickHandler;
}
public static void EnableClickEvent()
{
myButton.Click += new RoutedEventHandler(_buttonClickHandler);
}
}
Да, это правильно. Даже в общем случае вы можете отказаться от синтаксиса «new EventHandler (...)»; то есть myButton.Click + = myButton_Click; действительно само по себе.
если _buttonClickHandler уже является RoutedEventHandler, не следует ли мне просто установить его как myButton.Click + = _buttonClickHandler?