4

我正在尝试实现一个消息传递系统,我只是使用常规的 .NET 事件,但问题是发布者的寿命比订阅者长,并且发布者持有对订阅者的引用并防止事件被取消注册。

我一直在研究弱事件,但是它们有很多不同的实现方式,我很难将我的大脑包裹在它们周围。我想要一些简单的东西。

此外,一旦事件没有引用,他们中的大多数都不会立即取消注册该事件。我想要一个在对象没有更多引用或超出范围时立即取消注册事件的系统。

我可以不使用内置的事件语法糖,而是使用各种公共静态类来促进整个工作。

我只想能够在一个类中引发一个事件,该事件将调用所有订阅者的方法,这些方法将在订阅者不再使用后立即自动取消注册。

可以做到这一点还是已经以某种方式存在于框架中?

4

1 回答 1

0

如果我们定义一个委托:

public delegate void Callback (string s);

如果发布者类持有一个事件:

public event Callback Notify;

然后,订阅者构造函数将包含注册代码,并且它的类将包含将订阅事件的“更新”方法:

   class Subscriber 
 {
     Publisher publisher;

     public Subscriber (Publisher publisher) 
     {
      this.publisher = publisher;
      publisher.Notify += Update;
     }

    public void Update(string subjectState) 
    {
     state = subjectState;
    }
 }

为了改变这个订阅者在它即将死亡时从事件中注销,我们需要为它的类实现一个终结器:

~Subscriber () 
 {
   if (publisher != null)
   {
     publisher.Notify -= Update;
   }
 }

这样我们就可以确定订阅者将不再注册到该事件。有关“Finalize”方法的更多信息,请阅读“MSDN”杂志上关于“垃圾收集”的这篇精彩文章

于 2012-11-19T07:37:19.993 回答