假设我有一个以这种方式声明的Action委托:
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将不再被调用。
答案 0 :(得分:5)
您需要将对通用委托的引用存储到字段中,以便稍后您可以使用此缓存的委托字段取消订阅:
// 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;
答案 1 :(得分:4)
由于您的签名似乎匹配(假设您有void
返回类型),您不需要添加匿名函数,但可以直接使用方法组:
menuInputController.menuAction += this.traverser.OnMenuAction;
在这种情况下,取消订阅也应该有效:
menuInputController.menuAction -= this.traverser.OnMenuAction;