方法作为参数传递给方法C#2.0

方法作为参数传递给方法C#2.0,c#,c#-2.0,C#,C# 2.0,如果我有这样一段代码: private void DoOperations(//method passed in) { executeA(); executeB(); // run method passed in to DoOpertions() executeC(); } 是否可以将方法作为参数传入?方法本身可能有X个参数 谢谢当然可以,因为没有您想要的参数操作[1] private void DoOperations(Action action) {

如果我有这样一段代码:

private void DoOperations(//method passed in)
{
    executeA();
    executeB();

    // run method passed in to DoOpertions()

    executeC();

}
是否可以将方法作为参数传入?方法本身可能有X个参数


谢谢

当然可以,因为没有您想要的参数
操作
[1]

private void DoOperations(Action action)
{
  action();
}    
//usage    
DoAction( new Action(SayHello)  );

private void SayHello()
{
  Console.WriteLine("Hello World")
}
[1] 是的,请使用


签出此帖子

您可以传递一名代表。委托是一个方法指针,其签名与其引用的方法相同


更多信息请参见。

为了补充Nenad的答案,在.Net framework中有许多内置代理,您应该尽可能多地使用这些代理,而不是重新创建自己的代理来做同样的事情


如果委托没有返回值,请使用操作委托,否则请使用Func委托,每个委托最多重载4个输入参数。

是,您可以使用该类型的参数定义委托和DoOperatios()函数<代码>在此处输入代码

delegate void AsFunction(string str, string str);// as many arguments as you want
public DoOperations(AsFunction asFunction)
{

        asFunction("hello1", "hello2");

}

当你说“该方法可能有X个参数”时,我认为你需要确定谁(即哪段代码)知道这些参数。是DoOperations方法知道他们吗?如果是这样,那么您可能希望传递一个具有所需的确切方法签名或可以接受一组参数的委托,如James Curran的答案中所示。是不是那些行动的召唤者知道?然后,您可能希望将一个匿名方法作为
Action
Func
传递给DoOperations方法,例如在Jamiec、Nenad或Nix的答案中。不喜欢它,但它是有效的。为什么不提供更多的结构/类型。。。。对象[]p?(我知道@james curran这不是你的问题………lambda与c#2.0不兼容,它们是用c#3.0(.net 3.5)引入的)
delegate void AsFunction(string str, string str);// as many arguments as you want
public DoOperations(AsFunction asFunction)
{

        asFunction("hello1", "hello2");

}