C# 使用事件订阅服务器;凌驾;事件调用者';s法

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;

恕我直言,我对其中一些概念还不是很有经验。但是有没有一种方法(使用C#)可以使用通过事件调用的“委托”,它实际上会覆盖调用事件的方法

当一个事件只有一个订户时,我想我有一个解决方案。但如果我想在调用特定订阅者的方法时重写,则不会这样做

提前谢谢,如果这个问题有点太多,我道歉

//示例伪代码可以更好地解释这个问题

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