Come passare un riferimento di metodo a un metodo diverso in C #
Domanda
Vorrei passare un riferimento a un metodo in un altro metodo e memorizzarlo come variabile. Successivamente, vorrei utilizzare questo riferimento per definire un gestore eventi.
Quando si crea un gestore di eventi, viene passato un riferimento al metodo come:
myButton.Click += new RoutedEventHandler(myButton_Click);
E se guardi il costruttore per " RoutedEventHandler " da intelliSense, sembra:
RoutedEventHandler(void(object, RoutedEventArgs))
Quello che vorrei fare è passare il metodo " myButton_Click " a un diverso metodo statico e quindi creare un gestore eventi lì. Come passo il riferimento al metodo statico? Ho provato quanto segue ma non viene compilato:
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);
}
}
Grazie, Ben
Soluzione
Per fare riferimento a un metodo di riferimento (chiamato delegato in. NET), utilizzare il nome del gestore, anziché la firma.
public class EventBuilder
{
private static RoutedEventHandler _buttonClickHandler;
public EventBuilder(RoutedEventHandler buttonClickHandler)
{
_buttonClickHandler = buttonClickHandler;
}
public static void EnableClickEvent()
{
myButton.Click += new RoutedEventHandler(_buttonClickHandler);
}
}
Altri suggerimenti
try
private static delegate void(object sender, RoutedEventArgs e) _buttonClickHandler;