使用.NET';温特经理
是否有使用.NET实现弱事件的示例使用.NET';温特经理,.net,weak-events,weakeventmanager,.net,Weak Events,Weakeventmanager,是否有使用.NET实现弱事件的示例 我试图通过遵循文档中的“继承人须知”来实现它,但它是模糊的。例如,我不知道如何从自定义管理器中的staticAddListener函数调用ProtectedAddListener。我按照文档“继承者注释”部分中的指导原则自己解决了这个问题。下面是WeakEventManager的基本实现。源于事件的类名为PropertyValue,事件名为Changed public class PropertyValueChangedEventManager : WeakE
我试图通过遵循文档中的“继承人须知”来实现它,但它是模糊的。例如,我不知道如何从自定义管理器中的static
AddListener
函数调用ProtectedAddListener
。我按照文档“继承者注释”部分中的指导原则自己解决了这个问题。下面是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;
}
}
是一个开源项目,具有易于使用的实现。你可能想看看他们的代码,或者只是照原样使用
方法返回一个新委托,该委托调用相同的
目标作为原始委托,但对
使侦听器不被委托保持活动状态:
var handler=newpropertychangingeventhandler(listener.HandleChange);
observable.PropertyChanging+=handler.MakeWeak();
当前实施对委托有以下限制:
- 不支持返回值李>
- 不支持Out和Ref的参数
((PropertyValue)source)代码>@alpha-mouse:您的“较短的实现”中的“弱点”到底在哪里?保罗·格罗克:我的评论与之前未经编辑的答案有关。现在我一点也不反对。
var handler= new PropertyChangingEventHandler(listener.HandleChange);
observable.PropertyChanging += handler.MakeWeak<PropertyChangingEventHandler>();