2011-04-08 77 views
1

注意;發佈僞碼示例...請參閱下文示例文本(我告訴你,這將是一個熱鬧的一塌糊塗!)一個代表的多個事件

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

而不是使用事件處理程序的方法...

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方法。

+1

發佈你的全班 – hunter 2011-04-08 00:19:24

+0

我認爲你應該給你更多的情況。也許舉一個你想要實現的場景的例子。 – AbdouMoumen 2011-04-08 00:20:53

+0

如果你和每個人都可以從「搞笑亂七八糟」中學習,那對每個人都有好處。無論如何發佈它。 – 2011-04-08 00:21:43

回答

0

我真的沒有必要使用事件委託,但是使用其他參數來路由需要添加它們並在整個過程中使用它們或使用現有的並導致混亂的事件,因此使用事件代理來路由交易事件,我只是補充說:

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

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

所以當backtest.cs運行時(Event == null)運行了備用方法。

1

我會建議先制定出一個流程圖。在我看來,你想要做什麼並不清楚。也許用流程圖(或者其他一些記錄系統功能的方式)就可以了。

我甚至不確定你需要代表這個問題的方式來描述它。