一个委托的多个事件

本文关键字:事件 一个 | 更新日期: 2023-09-27 17:49:15

注意;正在发布伪代码示例。。。请参阅下面的示例文本(我告诉过你这将是一个滑稽的混乱!(

Class Enter
{
  public event EnterDelegate EnterDelegateEvent;
  public event ExitDelegate ExitDelegateEvent;
  public Enter(EventEventArgs e)
  {
     // do something
     EnterOrder(e);
     ExitEventArgs ev = new ExitEventArgs(string ticker, double prices.. etc);
     ExitEvent(ev);
      // update order status etc.
  }
  private double EnterOrder()
  {
     double ent = 0.00
     if (EnterDelegateEvent != null)
     {
         ent = EnterDelegateEvent(this, e);
         return ent;
     }
     else { return e.lo;  }
  }
   public double ExitEvent(ExitEventArgs e)
   {
     // do something
     ExitEvent(ev);
   }
   private double ExitEvent()
   {
     double ext = 0.00
     if (ExitDelegateEvent != null)
     {
         ext = ExitDelegateEvent(this, e);
         return ext;
     }
     else { return e.Hi;  }
   }
}  // end Enter Class

Class EventHandlers
{
   public double SendEnter(EventArgs e)
   {
       // send enter to order server here
       return price;
   }
   public double SendExit(EventArgs e)
   {
       // send exit to order server here
       return price
   }
}

Orders Class
{
   Enter ent = new Enter();
   public GetOrders()
   {
      // get order data
      // create order event
      EnterEventArgs ev = new EnterEventArgs(ticker, price, data...etc);
      ent.Enter(ev);
    }
}
Orders.aspx.cs
{
    EventHandlers evt = new EventHandlers();
    Enter ent = new Enter();
    Orders ord = new Orders();
    Private void login()
    {
       // log into Orders Server
       ent.EnterDelegateEvent += EnterDelegate(evt.SendEnter);
       ent.ExitDelegateEvent += ExitDelegate(evt.SendExit);
    }
    private void logout()
    {
        // delete / remove delegate event handlers;
    }
    // initiate orders example event
    private void btnclick_GetOrders()
    {
       ord.GetOrders();
    }
}

除了运行上面的GetOrders,我还需要从GetBackTest((运行另一组订单。。这有时需要同时进行,因此当它运行EnterOrder((例程时,EventDelegate需要返回if(EventDelegate==null({return e.price;}

不是使用EventHandler方法。。。

Class Backtest
{
    Enter ent = new Enter();
   // kickoff enter order just as Orders Class does
    // this class needs to NOT use the Event Delegate as Orders class does
}

有没有一种简单的方法可以打开和关闭DelegateEvents,并确保只实例化其中一个??如果我将Delegate事件设置为Static,那么backtest类将使用eventhandler方法。

一个委托的多个事件

我不确定我是否完全理解您所描述的场景,但事件和委托一开始可能有点棘手。我建议阅读一些.NET事件教程:

  • 活动-http://msdn.microsoft.com/en-us/library/aa645739(VS.71(.aspx
  • 学员-http://msdn.microsoft.com/en-us/library/aa288459(VS.71(.aspx
  • 另一个教程-http://www.csharp-station.com/Tutorials/lesson14.aspx

我建议先制定一个流程图。在我看来,你到底想做什么还不清楚。也许有了流程图(或其他记录系统功能的方式(,它就会是

我甚至不确定你是否需要用你描述的方式来解决这个问题。

我真的不必使用事件委托,但是使用其他参数来路由事件需要添加它们并在整个过程中使用它们,或者使用现有的并造成严重破坏,所以要使用事件委托来路由交易事件,我只添加了:

 EventDelegateName += new DelegateName(eventhandler); // to top of orders.cs
 EventDelegateName -= new DelegateName(eventhandler); // to bottom of orders.cs

因此,当backtest.cs运行(Event==null(时,会运行备用方法。