0

少しひねりを加えたオブザーバー パターンを実装しようとしています。サブジェクトとオブザーバーは同じクラスです。例えば、

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 が 1 つしかなく、Tin または Tout のいずれかであり、両方ではないためです。どうすればこれを回避できますか? デザインを変更するその他の提案も歓迎します。これをお読みいただきありがとうございます。質問を理解するのに十分明確であることを願っています。

4

2 に答える 2

2

イベント ハンドラーも変更します。

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

public event UpdateHandler<Tin> UpdateEvent; 
于 2010-01-08T16:20:14.517 に答える
0

こちらの質問と回答をご覧ください。これは、厳密に型指定されたジェネリックを使用した pub/sub の非常に優れた実装です。

于 2010-01-08T16:47:08.443 に答える