如何在 C# 中从操作委托中删除方法
本文关键字:删除 方法 操作 | 更新日期: 2023-09-27 18:17:34
可能的重复项:
C# 添加和删除匿名事件处理程序
假设我有一个以这种方式声明的操作委托:
public event Action<MenuTraverser.Actions> menuAction;
我以这种方式将一种方法与它相关联:
menuInputController.menuAction += (MenuTraverser.Actions action) => this.traverser.OnMenuAction(action);
现在,一切正常,但在某些情况下,我需要删除委托的方法,我不知道如何。我尝试了这种方式,但不起作用:
menuInputController.menuAction -= (MenuTraverser.Actions action) => this.traverser.OnMenuAction(action);
我怎么能做这样的事情?我需要不再调用我的方法 OnMenuAction。
您需要将对
通用委托的引用存储到字段中,以便稍后可以使用此缓存的委托字段取消订阅:
// declare on a class fields level
Action<MenuTraverser.Action> cachedHandler;
// in constructor initialize
cachedHandler = (action) => this.traverser.OnMenuAction(action);
// subscribe
menuInputController.menuAction += cachedHandler;
// unsubscribe
menuInputController.menuAction -= cachedHandler;
由于您的签名似乎匹配(假设您具有void
返回类型(,因此您不需要添加匿名函数,但您可以直接使用方法组:
menuInputController.menuAction += this.traverser.OnMenuAction;
在这种情况下,取消订阅也应该有效:
menuInputController.menuAction -= this.traverser.OnMenuAction;