我想调用一个方法A,其参数已经从另一个方法指定。 所以我想将方法调用和参数作为参数传递给MethodB,一旦它完成了一些处理,就用指定的参数调用MethodA。
我知道我可以将调用作为一个方法B作为委托参数传递,然后也传递这样的参数:
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中指定的方法B.只是想知道。希望这有意义,如果您想了解更多细节,请告诉我。
答案 0 :(得分: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)
创建了一个新的Action
委托,其定义为使用参数Add()
调用1,2
。
答案 1 :(得分: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));
}
答案 2 :(得分: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);
}
}