È necessario utilizzare un delegato, che è una classe speciale che rappresenta un metodo. È possibile definire il proprio delegato o utilizzare uno di quelli incorporati, ma la firma del delegato deve corrispondere al metodo che si desidera passare.
Definizione del:
public delegate int MyDelegate(Object a);
Questo esempio corrisponde a un metodo che restituisce un intero e prende un riferimento a un oggetto come parametro.
Nell'esempio, sia methodA che methodB non accettano parametri restituiscono void, quindi è possibile utilizzare la classe del delegato Action incorporata.
Qui è la vostra esempio modificato:
public void PassMeAMethod(string text, Action method)
{
DoSomething(text);
// call the method
method();
}
public void methodA()
{
//Do stuff
}
public void methodB()
{
//Do stuff
}
public void Test()
{
//Explicit
PassMeAMethod("calling methodA", new Action(methodA));
//Implicit
PassMeAMethod("calling methodB", methodB);
}
Come si può vedere, è possibile utilizzare il tipo di delegato esplicitamente o implicitamente, a seconda di quale vi si addice.
fonte
2010-10-25 14:27:25
Dovresti riuscire a farlo con i delegati. – jimplode
Quale versione del framework .NET è in esecuzione? –
3.5, qualcuno può mostrarmi usando l'esempio sopra? grazie – raklos