web-dev-qa-db-fra.com

Passer une fonction comme paramètre

J'ai besoin d'un moyen de définir une méthode en c # comme ceci:

public String myMethod(Function f1,Function f2)
{
    //code
}

Soit f1:

public String f1(String s1, String s2)
{
    //code
}

est-ce qu'il y a un moyen de faire ça?

19
Babak.Abad

Bien sûr, vous pouvez utiliser le Func<T1, T2, TResult> délégué:

public String myMethod(
    Func<string, string, string> f1,
    Func<string, string, string> f2)
{
    //code
}

Ce délégué définit une fonction qui prend deux paramètres de chaîne et renvoie une chaîne. Il a de nombreux cousins ​​pour définir des fonctions qui prennent différents nombres de paramètres. Pour appeler myMethod avec une autre méthode, vous pouvez simplement passer le nom de la méthode, par exemple:

public String doSomething(String s1, String s2) { ... }
public String doSomethingElse(String s1, String s2) { ... }

public String myMethod(
    Func<string, string, string> f1,
    Func<string, string, string> f2)
{
    //code
    string result1 = f1("foo", "bar");
    string result2 = f2("bar", "baz");
    //code
}
...

myMethod(doSomething, doSomethingElse);

Bien sûr, si le paramètre et les types de retour de f2 ne sont pas exactement les mêmes, vous devrez peut-être ajuster la signature de la méthode en conséquence.

33
p.s.w.g