2017-02-16 51 views
1
委托

考虑下面的类:调用两个功能

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

我不认为它的工作原理,但如果有人能我很高兴证明我是错的。

回答

6

您应该使用closures捕捉功能参数:

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

,以后你可以叫:

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

如果你想调用f1方法上ab实例(我假设你有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) 
+0

但这种方式我不能做b.ff(); –

+3

Action ff不是类A中的方法,所以'A.ff();'是无效的。你只需要做'ff();'。 –

+1

对不起,现在我明白了。非常感谢谢尔! –