具有预设参数的 C# 委托
C# delegate with pre-set parameters
我需要用命令模式做一些类似的事情,但在委托或类似的方面。
它应该是这样的:
private MyFunc Method1() {
MyFunc func;
/*
set all parameters to func
*/
return func;
}
private void Method2()
{
var funcWithAllParameters = Method1();
funcWithAllParameters.Invoke();
}
private MyFunc(a lot of parameters) {}
您可以使用 lambda 函数执行此操作,该函数为 MyFunc
提供参数并调用 MyFunc
。结果是 Action
委托,其签名为 void ()
private Action Method1() {
return () => MyFunc(new Type1(), null);
}
private void Method2()
{
var funcWithAllParameters = Method1();
funcWithAllParameters.Invoke();
}
private void MyFunc(Type1 p1, Type2 p2)
{
//
}
您可以像这样将值放入闭包中:
private Func<TResult> Method1()
=> () => MyFunc(/*a lot of parameters*/"param1", 12, ...);
因此您可以在闭包中加载参数,然后使用函数:
var func = Method1();
var result = func();
当然你也可以将该函数作为其他函数的参数:
private TResult SomeOtherMethod(Func<TResult> functionWithSetParameters)
=> functionWithSetParameters();
我需要用命令模式做一些类似的事情,但在委托或类似的方面。
它应该是这样的:
private MyFunc Method1() {
MyFunc func;
/*
set all parameters to func
*/
return func;
}
private void Method2()
{
var funcWithAllParameters = Method1();
funcWithAllParameters.Invoke();
}
private MyFunc(a lot of parameters) {}
您可以使用 lambda 函数执行此操作,该函数为 MyFunc
提供参数并调用 MyFunc
。结果是 Action
委托,其签名为 void ()
private Action Method1() {
return () => MyFunc(new Type1(), null);
}
private void Method2()
{
var funcWithAllParameters = Method1();
funcWithAllParameters.Invoke();
}
private void MyFunc(Type1 p1, Type2 p2)
{
//
}
您可以像这样将值放入闭包中:
private Func<TResult> Method1()
=> () => MyFunc(/*a lot of parameters*/"param1", 12, ...);
因此您可以在闭包中加载参数,然后使用函数:
var func = Method1();
var result = func();
当然你也可以将该函数作为其他函数的参数:
private TResult SomeOtherMethod(Func<TResult> functionWithSetParameters)
=> functionWithSetParameters();