繁体   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