Ответ 1
Конечно, вы можете использовать делегат Func<T1, T2, TResult>
:
public String myMethod(
Func<string, string, string> f1,
Func<string, string, string> f2)
{
//code
}
Этот делегат определяет функцию, которая принимает два строковых параметра и возвращает строку. У него есть многочисленные кузены для определения функций, которые принимают различное количество параметров. Чтобы вызвать myMethod
другим способом, вы можете просто передать имя метода, например:
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);
Конечно, если параметры и возвращаемые типы f2
не совсем одинаковы, вам может потребоваться соответствующим образом настроить подпись метода.