考虑以下课程:
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)
我觉得它不起作用,但如果有人能证明我错了,我很高兴.
您应该使用闭包来捕获函数参数:
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 a或b实例(我假设你有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)