考虑以下课程:
class A
{
void f1(int a){}
void f2(int b){}
}
我想做以下事情:
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);
我觉得它不起作用,但如果有人能证明我错了,我很高兴。
答案 0 :(得分:6)
您应该使用closures来捕获函数参数:
Action f = () => a.f1(1);
Action ff = () => a.f1(10);
以后你可以打电话:
f(); // calls a.f1(1)
ff(); // calls a.f1(10)
如果您想在f1
或a
个实例上调用b
方法(我假设您有B : A
个继承),那么您应该使用Action<T>
委托将接受实例调用f1
方法:
Action<A> f = x => x.f1(42);
并使用instace调用此操作,您希望使用捕获的参数falue(42)运行方法f1
:
f(a); // calls a.f1(42)
f(b); // calls b.f1(42)