代码之家  ›  专栏  ›  技术社区  ›  sourcenouveau

使用.NET的WeakEventManager实现弱事件的示例

  •  25
  • sourcenouveau  · 技术社区  · 14 年前

    WeakEventManager ?

    我试图通过遵循文档中的“继承者注释”来实现它,但它是模糊的。例如,我不知道怎么打电话 ProtectedAddListener 从我的静态 AddListener

    2 回复  |  直到 14 年前
        1
  •  28
  •   tordal    12 年前

    我是按照《继承人须知》一节中的指导原则自己想出来的 WeakEventManager 文档。下面是 WeakEventManager PropertyValue 事件名为 Changed .

    public class PropertyValueChangedEventManager : WeakEventManager
    {
        public static PropertyValueChangedEventManager CurrentManager
        {
            get
            {
                var manager_type = typeof(PropertyValueChangedEventManager);
                var manager = WeakEventManager.GetCurrentManager(manager_type) as PropertyValueChangedEventManager;
    
                if (manager == null)
                {
                    manager = new PropertyValueChangedEventManager();
                    WeakEventManager.SetCurrentManager(manager_type, manager);
                }
    
                return manager;
            }
        }
    
        public static void AddListener(PropertyValue source, IWeakEventListener listener)
        {
            CurrentManager.ProtectedAddListener(source, listener);
        }
    
        public static void RemoveListener(PropertyValue source, IWeakEventListener listener)
        {
            CurrentManager.ProtectedRemoveListener(source, listener);
        }
    
        protected override void StartListening(object source)
        {
            ((PropertyValue)source).Changed += DeliverEvent;
        }
    
        protected override void StopListening(object source)
        {
            ((PropertyValue)source).Changed -= DeliverEvent;
        }
    }
    
        2
  •  7
  •   angularsen Bcelik    13 年前

    Sharp Observation

    Usage

    MakeWeak()方法返回一个新的委托,该委托调用相同的 target作为原始委托,但对

    var handler= new PropertyChangingEventHandler(listener.HandleChange);
    observable.PropertyChanging += handler.MakeWeak<PropertyChangingEventHandler>();
    

    Limitations

    当前的实现对委托有以下限制:

    推荐文章