繁体   English   中英

C# 在事件处理程序中添加额外参数

[英]C# add extra parameter in the handler of an event

在 C#/Unity 中,有没有办法将更多的 arguments 传递给委托中未指定的事件处理程序?

假设我不能修改委托。 (它来自外部 class。)

我需要能够执行此操作,以便稍后可以取消订阅我的处理程序( onClick -= HandleClick在代码的其他地方)。

例子:

delegate void A(str s);

event A onClick;

Awake() {
 onClick += HandleClick;
}

void HandleOnClick(str s, int a) {
   // How to get access to this second argument a here?
}

我知道我可以做到以下几点:

int a = 10;
onClick += (s) => HandleOnClick(s, 10);

但是,如果我以这种方式连接,这不会让我取消注册 lambda(因为它是匿名代表)。

您可以尝试使用变量来保存能够订阅或取消订阅事件的委托引用的一种方法。

Awake() {
  int a = 10;
  var e1 = (s) => HandleOnClick(s, a);
  onClick += e1;
 
  onClick -= e1;
}

暂无
暂无

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

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