将额外参数传递给C#回调

时间:2015-01-15 09:17:40

标签: c# asp.net

如何为以下回调添加额外参数:

objXmpp.OnLogin += new ObjectHandler(objXmppArun_OnLogin);

private void objXmppArun_OnLogin(object sender)
{

}

是否可以向objXmppArun_OnLogin事件处理程序发送一个额外参数?

2 个答案:

答案 0 :(得分:5)

不,这是不可能的。 C#中的事件(以及一般的委托)定义了具有固定参数的特定方法签名,因此您无法添加额外的方法签名。

最好的办法是创建一个单独的方法,您的事件处理程序可以调用该方法并将额外的参数传递给:

objXmpp.OnLogin += new ObjectHandler(objXmppArun_OnLogin);

private void objXmppArun_OnLogin(object sender)
{
    LoginCheck(sender, "Some Info");
}

private void LoginCheck(object sender, string extraParameter)
{
    // do your thing here
}

或者,如果您所需的值仅在附加处理程序时已知,则可以使用匿名方法将其包装起来:

private void AttachHandlers()
{
    string parameter = "Some Info";
    objXmpp.OnLogin += new ObjectHandler(sender => {
        objXmppArun_OnLogin(sender, parameter);
    });
}

private void objXmppArun_OnLogin(object sender, string extraParameter)
{
}

答案 1 :(得分:0)

您无法更改您正在使用的任何组件(objXmpp.OnLogin)所期望的委托,因此您无法更改处理方法所期望的参数。

但是,该处理程序可以访问属性&它所在的类的方法,就像任何常规方法一样。

(您可能希望将问题更新为您尝试实现的目标,而不是您尝试实现的目标 - 您可能会得到更好的答案)