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,它可以是 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 回答