【发布时间】:2021-02-24 12:16:51
【问题描述】:
我希望能够让一个对象将其方法之一添加到传递给它的EventHandler,并赋予所述方法从EventHandler 中删除自身的能力。
public class EventRaiser {
public event EventHandler event1
public event EventHandler event2
public void fire() {
event1?.Invoke(this, null);
event2?.Invoke(this, null);
}
}
public class EventSubscriber {
EventHandler eh;
public EventSubscriber(EventHandler eh) {
this.eh = eh;
eh += receive;
}
public void receive(object obj, EventArgs data) {
// Do stuff.
if(condition) eh -= receive;
}
}
public class MainClass {
public void Main() {
EventRaiser er = new EventRaiser();
EventSubscriber es1 = new EventSubscriber(er.event1);
EventSubscriber es2 = new EventSubscriber(er.event2);
er.fire();
}
}
上面的代码无法编译,因为我什至无法将er.event1 或er.event2 传递给EventSubscriber(“事件只能出现在+=...的左侧”)。从EventHandlers 中删除event 关键字可解决此问题,但取消订阅无法正常工作。有没有办法使这项工作?可以使用指针吗?
【问题讨论】:
-
我认为你不应该甚至可以绕过事件本身。
标签: c# dynamic eventhandler