C# 使用事件订阅服务器;凌驾;事件调用者';s法
恕我直言,我对其中一些概念还不是很有经验。但是有没有一种方法(使用C#)可以使用通过事件调用的“委托”,它实际上会覆盖调用事件的方法 当一个事件只有一个订户时,我想我有一个解决方案。但如果我想在调用特定订阅者的方法时重写,则不会这样做 提前谢谢,如果这个问题有点太多,我道歉 //示例伪代码可以更好地解释这个问题C# 使用事件订阅服务器;凌驾;事件调用者';s法,c#,events,event-handling,return,break,C#,Events,Event Handling,Return,Break,恕我直言,我对其中一些概念还不是很有经验。但是有没有一种方法(使用C#)可以使用通过事件调用的“委托”,它实际上会覆盖调用事件的方法 当一个事件只有一个订户时,我想我有一个解决方案。但如果我想在调用特定订阅者的方法时重写,则不会这样做 提前谢谢,如果这个问题有点太多,我道歉 //示例伪代码可以更好地解释这个问题 class Broadcaster{ public delegate void myDelegate(); public event myDelegate myEvent;
class Broadcaster{
public delegate void myDelegate();
public event myDelegate myEvent;
void foo(){
if(myEvent != null){
myEvent();
**Here is the issue**
//How can I return here, not for every subscriber
//but only if a subscriber wants to?
return;
}
//Do Something if a subscriber has not already returned
}
}
class Listener(){
void Start(){
FindObjectOfType<Broadcaster>().myEvent += OnBroadcasterEvent();
}
public void OnBroadcasterEvent(){
//Do something
**Here is the issue**
//Return, or, break from parent method (i.e. where event was called from)
}
}
class广播员{
公共委托void myDelegate();
公共事件myEvent;
void foo(){
if(myEvent!=null){
myEvent();
**问题就在这里**
//我怎样才能回到这里,而不是每个订户
//但只有在订户愿意的情况下?
返回;
}
//如果订户尚未返回,请执行某些操作
}
}
类侦听器(){
void Start(){
FindObjectOfType().myEvent+=OnBroadcasterEvent();
}
公共广播活动(){
//做点什么
**问题就在这里**
//从父方法返回或中断(即从何处调用事件)
}
}
听起来委托并不是您要寻找的答案,因为它们可能以未知的顺序执行
ASP.NET处理其管道的方式可能是一种更好的方法。基本上有一个调用链,链的每个部分调用链中的下一个,直到其中一个返回
每个“处理程序”都由链中要调用的“下一个”处理程序构成,然后您“调用”链的头
public class MyHandler
{
private Func<MyRequest, MyResult> _next;
public MyHandler(Func<MyRequest,MyResult> next) => _next = next;
public MyResult Handle(MyRequest request)
{
if(IWantToShortCircuit)
{
return request;
}
return _next(request);
}
}
或者你可以短路
I1 I1
| ^
v |
I2 ---> O2
I3 O3
在第二个示例中,I2已决定短路,而I3尚未调用。抱歉,只是为了进一步了解。。。您是否希望在事件发生时打破循环/功能?
I1 I1
| ^
v |
I2 ---> O2
I3 O3