簡體   English   中英

使用泛型的觀察者模式C#

[英]Observer pattern C# using generics

我試圖稍微改變一下觀察者模式,主題和觀察者是同一個類。 例如,

class myclass
{ 
  public delegate void UpdateHandler(object sender);

  public event UpdateHandler UpdateEvent;

  public Attach(myclass obj){ // use delegate to attach update function of obj}

  public Update(object sender){ // do something with sender}

  public Notify() { // use UpdateEvent to update all attached obj's }

}

這應該工作正常。 現在,我想消除每次有更新事件時裝箱和拆箱所帶來的性能損失,因此我刪除了基於“對象”的實現,並嘗試使用泛型。 例如,

class myclass<Tin, Tout>
{ 
  public delegate void UpdateHandler(Tout sender);

  public event UpdateHandler UpdateEvent;

  public Attach(myclass<Tin,Tout> obj)
      { // use delegate to attach update function of obj}

  public Update(Tin sender){ // do something with sender}

  public Notify() 
      { // use UpdateEvent to update all attached obj's 
        // but now we have to send Tout 
      }

}

這是行不通的,因為我有一個EventHandler,它可以是Tin或Tout,但不能同時是兩者。 我該如何解決? 也歡迎任何其他更改設計的建議。 非常感謝您閱讀本文,我希望這很清楚可以理解這個問題。

也更改您的事件處理程序:

public delegate void UpdateHandler<Tin>(Tin sender); 

public event UpdateHandler<Tin> UpdateEvent; 

查看此問題和答案。 這是使用強類型泛型的pub / sub的非常好的實現。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM