在两个函数上调用委托

Joe*_*ger 1 c#

考虑以下课程:

class A
{
void f1(int a){}
void f2(int b){}
}
Run Code Online (Sandbox Code Playgroud)

我想做以下事情:

A a = new A();
A b = new B();

Func f = A.f1(1); //A function that has already got arguments.
Func ff = A.f1(10); //A function that has already got arguments.

a.f(); //Calls a.f1(1);
a.ff(); //Calls a.f1(10);
b.f(); //Calls b.f1(1);
Run Code Online (Sandbox Code Playgroud)

我觉得它不起作用,但如果有人能证明我错了,我很高兴.

Ser*_*kiy 6

您应该使用闭包来捕获函数参数:

Action f = () => a.f1(1);
Action ff = () => a.f1(10);
Run Code Online (Sandbox Code Playgroud)

之后你可以打电话:

f();  // calls a.f1(1)
ff(); // calls a.f1(10)
Run Code Online (Sandbox Code Playgroud)

如果你想调用f1方法on ab实例(我假设你有B : A继承),那么你应该使用Action<T>delegate接受实例调用f1方法:

Action<A> f = x => x.f1(42);
Run Code Online (Sandbox Code Playgroud)

并使用instace调用此操作,您希望f1使用捕获的参数falue(42)运行该方法:

f(a); // calls a.f1(42)
f(b); // calls b.f1(42)
Run Code Online (Sandbox Code Playgroud)

  • Action ff不是A类中的方法,因此`A.ff();`无效.你只需要做`ff();`. (3认同)