繁体   English   中英

如果不使用哪种语言,该如何实现要在c#中创建的新事件处理程序系统?

[英]How to implement this new event handler system I want to invent in c# if not in what language?

我问了一个有关.NET中事件冒泡的先前问题, 什么与.NET中的javascript起泡事件等效?

它不像Javascript那样存在。

有人说这是由于性能原因,尽管我不确定,因为DOM没有性能问题,为什么Winform也不会。

但是,可以说这是真的,那么我想在诸如javascript这样的系统冒泡系统与.NET中不存在的冒泡系统之间创建某种中介。

目的是一如既往的松耦合。 那就是我不希望在我的代码中有明确的引用,例如使用sender或将方法调用与基本父级的引用硬连接。

我想要的只是使用“ Forward”之类的关键字。

我如何在C#中实现这样的系统。 如果无法在C#中使用什么语言,我可以这样做?

看一下如何在WPF中完成事件,包括路由事件。 不需要新的关键字,只需要一组类即可按照您希望的方式路由事件。

MFC甚至在C ++中做了这种事情-在C ++中没有任何“事件”支持,这是自已的。

如果您希望像WPF中那样路由事件,我敢打赌,将应用程序重写为WPF比编写自己的事件框架要容易得多。 如果您还喜欢双向数据绑定(请参阅MVVM)或改进的布局自定义故事等其他内容,那么您应该真正了解WPF。

您可能也可以在WinForms中实现路由事件。 您“只是”需要实现框架的发射,消耗和冒泡部分。

我认为实现自己的事件处理框架的主要问题是现有控件不知道如何发出或使用事件。 Winforms布局中没有现有的挂钩点,您可以在其中附加事件的使用。

您可以自己实现它。 您将需要自己的EventManager类。

public class EventManager
{
  public void AddEvent(Control control,string eventName,Delegate handler);
  public void RemoveEvent(Control control,string eventName,Delegate handler);
}

然后,此类使用HashSet和事件ControlAdded和ControlRemoved来跟踪您在其上注册了事件的所有控件及其所有子级。 然后,在您注册了该事件的控件的所有子级上为其注册的事件订阅自己的助手代理。 然后,该助手委托使用您想要的冒泡规则调用注册的事件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM