¿Cómo paso una referencia de método a un método diferente en C #?
Pregunta
Me gustaría pasar una referencia de un método a otro método y almacenarlo como una variable. Más adelante, me gustaría usar esta referencia para definir un controlador de eventos.
Al crear un controlador de eventos, se pasa una referencia de método como:
myButton.Click += new RoutedEventHandler(myButton_Click);
Y si miras el constructor para " RoutedEventHandler " desde intelliSense, parece que:
RoutedEventHandler(void(object, RoutedEventArgs))
Lo que me gustaría hacer es pasar el método " myButton_Click " a un método estático diferente y luego crear un controlador de eventos allí. ¿Cómo paso la referencia al método estático? Intenté lo siguiente pero no se compila:
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);
}
}
Gracias Ben
Solución
Para hacer referencia a una referencia de método (denominada delegate en. NET), use el nombre del controlador, en lugar de la firma.
public class EventBuilder
{
private static RoutedEventHandler _buttonClickHandler;
public EventBuilder(RoutedEventHandler buttonClickHandler)
{
_buttonClickHandler = buttonClickHandler;
}
public static void EnableClickEvent()
{
myButton.Click += new RoutedEventHandler(_buttonClickHandler);
}
}
Otros consejos
prueba
private static delegate void(object sender, RoutedEventArgs e) _buttonClickHandler;