В этом случае я предпочитаю определять делегата:
public delegate void MyFunction(string p1, int p2);
public void Foo(MyFunction myFunction) {
myFunction("something", 2);
}
Или вы можете использовать System.Reflection и передать в MethodInfo и использовать его так:
public void Foo(MethodInfo methodInfo) {
methodInfo.Invoke(new object[] {"something", 2});
}
Вы можете узнать больше о MethodInfo.Invoke здесь .У них есть несколько примеров.Но опять же, делегаты, вероятно, являются более чистым путем.