繁体   English   中英

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

[英]Pass extra parameter to C# callback

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

objXmpp.OnLogin += new ObjectHandler(objXmppArun_OnLogin);

private void objXmppArun_OnLogin(object sender)
{

}

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

不,不可能。 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)
{
}

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

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

(您可能想将您的问题更新为您要达到的目标,而不是如何达到目标-您可能会得到更好的答案)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM