Несколько событий для одного делегата - PullRequest
1 голос
/ 08 апреля 2011

Примечание;Пример размещения псевдокода ... См. Пример текста ниже (я говорил вам, что это будет смешной беспорядок!)

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.prices;}

Вместо использования метода 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 в качестве статических, класс backtest будет использовать методы обработчика событий.

Ответы [ 3 ]

1 голос
/ 08 апреля 2011

Я бы предложил сначала разработать блок-схему.Мне кажется, что именно вы хотите сделать, не понятно.Возможно, с блок-схемой (или каким-то другим способом документирования того, что делает система) это было бы.

Я даже не уверен, что вам нужны делегаты для этой проблемы, как вы ее описываете.

1 голос
/ 08 апреля 2011

Я не уверен, что полностью понимаю сценарий, который вы описываете, но поначалу события и делегаты могут быть немного хитрыми. Я бы посоветовал прочитать некоторые учебники по событиям .NET:

0 голосов
/ 13 апреля 2011

Мне действительно не нужно было использовать делегат события, однако использование других параметров для маршрутизации событий требовало добавления их и использования их повсеместно или использования существующих и вызывающих хаос, поэтому для маршрутизации торговых событий с использованием делегатов событий я просто добавил:

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

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

поэтому при запуске backtest.cs (Event == null) запускается альтернативный метод.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...