2017-02-16 71 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

對不起,現在我明白了。非常感謝謝爾! –