在两个函数上调用委托

时间:2017-02-16 14:16:05

标签: c#

考虑以下课程:

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);

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

1 个答案:

答案 0 :(得分:6)

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

Action f = () => a.f1(1);
Action ff = () => a.f1(10);

以后你可以打电话:

f();  // calls a.f1(1)
ff(); // calls a.f1(10)

如果您想在f1a个实例上调用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)