我如何实现这种事件监听器设计?

时间:2014-01-30 14:59:05

标签: c# .net events

我是C#的新手,所以这可能是我不理解某些基本功能或错过语言的某些功能。我在网上搜索过,但我似乎找到的所有例子都包含在一个类中(换句话说,它们定义了事件以及触发事件时执行的方法),这不是我想要的。 / p>

对于我的场景,我想定义一个侦听器方法的接口,它可以接受一些提供指令的自定义参数(这可能是我自己的EventArgs吗?)。让我们假装它的车,所以我有方法名称:

  • 开始(MyCustomParameters par)
  • 加速(MyCustomParameters par)
  • 减速(MyCustomParameters par)

然后我希望能够创建提供这些方法的实际实现的类。

与所有这些完全分开,我有一个基于外部进程定期执行的类,我希望它负责触发这些事件(当汽车启动和加速等)。

这是我努力工作的基础,但到目前为止还没有运气。还有一个后续问题。如果我的监听器实现类需要维持给定调用的任何类型的状态,那么最好如何做到这一点(例如,当调用Accelerate时,它希望能够将它加速的速度返回给调用者的调用者。事件 - 例如80公里/小时)

希望你能提供帮助,非常感谢

1 个答案:

答案 0 :(得分:0)

这是c#中的事件/侦听器的简单示例:

 //your custom parameters class
    public class MyCustomParameters
    {
        //whatever you want here...
    }

    //the event trigger
    public class EventTrigger
    {
        //declaration of the delegate type
        public delegate void AccelerationDelegate(MyCustomParameters parameters);

        //declaration of the event
        public event AccelerationDelegate Accelerate;

        //the method you call to trigger the event
        private void OnAccelerate(MyCustomParameters parameters)
        {
            //actual triggering of the events
            if (Accelerate != null)
                Accelerate(parameters);
        }
    }

    //the listener
    public class Listener
    {
        public Listener(EventTrigger trigger)
        {
            //the long way to subscribe to the event (to understand you create a delegate)
            trigger.Accelerate += new EventTrigger.AccelerationDelegate(trigger_Accelerate);

            //a shorter way to subscribe to the event which is equivalent to the statement above
            trigger.Accelerate += trigger_Accelerate;
        }

        void trigger_Accelerate(MyCustomParameters parameters)
        {
            //implement event handling here
        }
    }

我希望它有所帮助。