2010-01-05 71 views
14

我有這個作爲我的類的成員之一「的KeyEvent」:存儲的方法,一類在C#中的一個成員變量

private delegate void eventmethod(); 

而且構造:

public KeyEvent(eventmethod D) { 
     D(); 
    } 

我想要做的是不是調用D()那裏,我想存儲該方法(D)作爲KeyEvent的成員變量,所以類似於:

stored_method = D(); 

然後在KeyEvent的另一種方法中,執行如下操作:

stored_method(); 

我該怎麼做?謝謝

回答

9

你幾乎已經有了代碼。只需創建正確的委託類型的成員字段並將參數保存到它就像使用任何其他數據類型一樣。

private eventmethod MySavedEvent; 

public void KeyEvent(eventmethod D) { 
    // Save the delegate 
    MySavedEvent = D; 
} 

public void CallSavedEvent() { 
    if (MySavedEvent != null) { 
     MySavedEvent(); 
    } 
} 
0
public class KeyEvent 
{ 
    private eventmethod hurr; 
    public KeyEvent(eventmethod D) 
    { 
    hurr = D; 
    } 
    public void SomeOtherMethod() 
    { 
    hurr(); 
    } 
} 

夫婦的事情... PascalCase類型/代表的/ etc(EventMethod)和駝峯參數(d,dIsMyMethod)。和重用什麼樣的框架,爲您提供:private Action hurr;

5

你可以這樣做:

private Action CallBackFunction {get; set;} 

public KeyEvent(Action callback) { 
    CallBackFunction = callback; 
} 

可以通過實例化:

new KeyEvent(MyFunction); 

哪裏myFunction是一些函數的名稱在該類

KeyEvent類可以調用該函數:

CallBackFunction(); 

Action類還允許傳入強類型參數,而Func類可用於返回結果的方法。

1

要被稱爲「頭等功能」 http://en.wikipedia.org/wiki/First-class_function

C#的東西,因爲3版本,支持匿名函數和lambda表達式。

因此可以使用Func<A,R>它代表一個函數取類型A的參數並返回類型R的值

從維基

static Func<double, double> MakeDerivative(Func<double, double> f, double deltaX) 
    { 
    return (x) => (f(x + deltaX) - f(x - deltaX))/(2 * deltaX); 
    } 
相關問題