2014-10-18 47 views
3

我想调用了methodA与其他方法已指定的参数。 所以我想通过方法调用和参数作为参数传递给方法b,一旦它做了一些处理,调用治法与指定的参数。传递方法调用带有参数已指定

我知道我可以通过呼叫作为的methodB作为委托参数,然后又传递参数,像这样:

static void Main(string[] args) 
     { 
      MethodB(1, 2, Add); 

      Console.ReadLine(); 
     } 

     public static void Add(int i, int j) 
     { 
      Console.WriteLine(i+j); 
     } 

static public class DelegateWithDelegateParameter 
    { 
     public static void MethodB(int param1, int param2, Action<int, int> dAction) 
     { 
      dAction(param1, param2); 
     } 
    } 

想知道,如果有可能与已经指定,而不是参数来做到这一点将参数ParamA,ParamB传递给MainB已经指定的MethodB。只是想知道。希望这是有道理的,请让我知道你是否想要更多的细节。

+0

“如果可能的话用参数来做到这一点已经* *指定,而不必参数至尊,ParamB从主传递到方法b *已指定*。”我不确定你的意思是“已经指定”,因为你用它来描述你想要做什么以及你在做什么(我认为这不是你想要的)。你是否说你想传递一个没有参数的代理,它基于一个需要一些参数的方法?就像这样:'Action a =()=> Add(1,2); a();' – 2014-10-18 19:22:48

回答

3

如果我跟着你所问的,得到你想要的东西你需要用你的电话添加在持有它的参数的委托。这是很容易使用lamda语法做:

static void Main(string[] args) 
{ 
    MethodB(() => Add(1, 2)); 

    Console.ReadLine(); 
} 

public static void Add(int i, int j) 
{ 
    Console.WriteLine(i+j); 
} 

static public class DelegateWithDelegateParameter 
{ 
    public static void MethodB(Action dAction) 
    { 
     dAction(); 
    } 
} 

声明() => Add(1,2)创建一个定义调用Add()与指标的影响1,2Action委托。

+0

准确地说,我在找什么,真是懊恼不知道自己:) – Rubans 2014-10-20 15:24:45

0

我想你想要的是:

static object InvokeMethod(Delegate method, params object[] args){ 
    return method.DynamicInvoke(args); 
} 

static int Add(int a, int b){ 
    return a + b; 
} 

static void Test(){ 
    Console.WriteLine(InvokeMethod(new Func<int, int, int>(Add), 5, 4)); 
} 
0

您可以通过委派去做。首先声明一个委托和勾你的方法把它像

public delegate void adddelegate(int a, int b); 
class Program 
{ 
    static void Main(string[] args) 
    { 
     adddelegate adddel = new adddelegate(Add); 

     DelegateWithDelegateParameter.MethodB(1, 2, adddel); 

     Console.ReadLine(); 
    } 

    public static void Add(int i, int j) 
    { 
     Console.WriteLine(i + j); 
    } 
} 

static public class DelegateWithDelegateParameter 
{ 
    public static void MethodB(int param1, int param2, adddelegate dAction) 
    { 
     dAction(param1, param2); 
    } 
}