如果我有一段代码如下:
private void DoOperations(//method passed in)
{
executeA();
executeB();
// run method passed in to DoOpertions()
executeC();
}
是否可以将方法作为参数传递?该方法本身可能有X个参数?
由于
答案 0 :(得分:4)
您可以传递委托。 Delegate是一个方法指针,与它引用的方法具有相同的签名。
请参阅Delegates。
答案 1 :(得分:2)
delegate void FunctionX(params object[] args);
private void DoOperations(FunctionX executeX)
{
executeA();
executeB();
executeX("any", "number", "of", "params");
executeC();
}
void MyFunction(params object[] p)
{
// do stuff
}
DoOperations(MyFunction);
答案 2 :(得分:1)
只是为了添加Nenad的答案,.Net框架中有许多内置代理,你应该尽可能多地尝试使用它们,而不是重新发明你自己的代理做同样的事情。 / p>
如果委托没有返回值,则使用Action委托,否则使用Func委托,每个委托重载最多4个输入参数。
答案 3 :(得分:0)
确实如此,因为没有你想要的参数Action
[1]
private void DoOperations(Action action)
{
action();
}
//usage
DoAction( new Action(SayHello) );
private void SayHello()
{
Console.WriteLine("Hello World")
}
答案 4 :(得分:0)
是的,请使用anonymous functions。
查看此帖子C# searching for new Tool for the tool box, how to template this code
答案 5 :(得分:0)
是的,您可以使用该类型的参数定义委托和DoOperatios()函数。 enter code here
delegate void AsFunction(string str, string str);// as many arguments as you want
public DoOperations(AsFunction asFunction)
{
asFunction("hello1", "hello2");
}