我试图略微扭曲地实现观察者模式,主体和观察者是同一个类。例如,
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,但不是两者。我该如何解决这个问题?任何其他改变设计的建议也欢迎。非常感谢您阅读本文,我希望这一点非常清楚,可以理解这个问题。
答案 0 :(得分:2)
也改变你的事件处理程序:
public delegate void UpdateHandler<Tin>(Tin sender);
public event UpdateHandler<Tin> UpdateEvent;
答案 1 :(得分:0)
查看this question和回复。这是一个非常好的pub / sub实现,具有强类型泛型。