C#转发接口(interface)事件

标签 c# events

我有一个定义事件的接口(interface):

interface IEXampleinterface 
{
   event MyEventHandler MyEvent;
}

在我的 GUI 类中,我调用了一个“处理器”类,它再次调用了一个实现接口(interface)的“解析器”类:

class GUI
{
   public DoSomething()
   {
      Processor processor = new Processor();
      processor.MyEvent += new MyEventHandler(processor_myevent);
      processor.DoSomething();
   }
   public processor_myevent(object sender, EventArgs e)
   {
      ...
   }
}

处理器类:

class processor
{
   IExampleInterface parser;
   event MyEventHandler MyEvent;

   public void DoSomething()
   {
      parser = new Parser();
      parser.MyEvent += new MyEventHandler(parser_myevent);
      parser.DoStuff();
   }
   public void parser_myevent(object sender, EventArgs e)
   {
      if(MyEvent != null)
      {
         MyEvent(sender, e)
      }
   }
}

解析器类:

class Parser : IExampleinterface
{
   event MyEventHandler MyEvent;

   public void DoStuff()
   {
      MyEvent(this, new EventArgs());
   }
}

如您所见,“Processor”类只是从“Parser”获取事件并将其转发给 GUI。这完全可行,但我想问的是是否有更优雅的方式来进行这种事件转发。

最佳答案

除了创建新事件并传递事件之外,您还可以直接指向该事件:

public event MyEventHandler MyEvent
{
    add
    {
        parser.MyEvent += value;
    }
    remove
    {
        parser.MyEvent -= value;
    }
}

我不确定这是否是最漂亮的事情,也许您最好采用更好的设计。但是,在我想出更好的方法之前,这将完成工作 ;)。

关于C#转发接口(interface)事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34680009/

相关文章:

c# - EventWaitHandle WaitOne 错误与 TimeSpan 大约 1 年

c# - 通用属性——如何在运行时指定类型

javascript - 使用 ReactJS 通过 Redux 进行简单的状态更新事件?

javascript - Internet Explorer的 “Autocomplete”函数不触发JavaScript事件

c# - 重温 Thread.Abort() - 它安全吗?

c# - 尝试将 JSON 转换为 [Key,Value] 字典

c# - 向 Apple 的 APNS 发出的 PushSharp 通知不起作用,不抛出任何异常

javascript - 如何在 Chrome 扩展中删除事件监听器

jquery - 使用 Jquery 将多个 DOM 元素附加到一个事件处理程序的最短方法?

php - 页面刷新时继续隐藏 HTML 输入字段?