将方法存储为类的成员变量

Xen*_*ate 15 c# methods delegates member

我把它作为我的'KeyEvent'类的成员之一:

private delegate void eventmethod();
Run Code Online (Sandbox Code Playgroud)

和构造函数:

public KeyEvent(eventmethod D) 
{
    D();
}
Run Code Online (Sandbox Code Playgroud)

我想要做的不是在那里调用D(),我想将该方法(D)存储为KeyEvent的成员变量,所以类似于:

stored_method = D();
Run Code Online (Sandbox Code Playgroud)

然后在另一个KeyEvent方法中,执行以下操作:

stored_method();
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

Eil*_*lon 10

你已经拥有了很多代码.只需创建一个右代理类型的成员字段,并将参数保存到它,就像使用任何其他数据类型一样.

private eventmethod MySavedEvent;

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

public void CallSavedEvent() {
    if (MySavedEvent != null) {
        MySavedEvent();
    }
}
Run Code Online (Sandbox Code Playgroud)


jja*_*cka 5

你可以这样做:

private Action CallBackFunction {get; set;}

public KeyEvent(Action callback) {
   CallBackFunction = callback;
}
Run Code Online (Sandbox Code Playgroud)

哪个可以通过以下方式实例化:

new KeyEvent(MyFunction);
Run Code Online (Sandbox Code Playgroud)

其中MyFunction是该类中某些函数的名称

然后,KeyEvent类可以使用以下命令调用该函数:

CallBackFunction();
Run Code Online (Sandbox Code Playgroud)

Action类还允许传入强类型参数,Func类可用于返回结果的方法.