zoukankan      html  css  js  c++  java
  • 实现EventHandler的监测

    需要实现这样的功能:监测程序中event触发的情况,事先约定event按照这样的方式定义:

    EventHandler<T> MyEvent
    

    假设一个类定义如下:

    public class EventEmitter
    {
        public class MyEventArgs : EventArgs
        {
        }
    
        public event EventHandler<T> MyEvent;
    
        public void Emit()
        {
            OnMyEvent();
        }
    
        protected void OnMyEvent()
        {
            var myEventHandler = MyEvent;
            if (myEventHandler != null)
            {
                myEventHandler(this, new MyEventArgs());
            }
        }
    }
    

    监测类定义如下:

    public class EventWatcher
    {
        public void SetProbe(object target, string eventName, Action<EventArgs> action) {
            var eventInfo = target.GetType().GetEvent(eventName);
            eventInfo.GetAddMethod().Invoke(target, new object[] { new EventHandler((sender, e) => {
                action(e);
            })});
        }
    }
    

    调用过程如下:

    var watcher = new EventWatcher();
    var emitter = new EventEmitter();
    watcher.SetProbe(emitter, "MyEvent", (e) =>
    {
        Console.WriteLine(String.Format("{0} is emitted", e.GetType()));
    });
    emitter.Emit();
    Console.Read();
    

    编程OK,但是运行的时候报错:

    error

    现在能够想到的就是规定Event按照如下方式定义:

    EventHandler MyEvent
    

    而不使用泛型,但是这样终究不爽,有什么办法可以解决吗?

  • 相关阅读:
    深入Python(一)
    深入Python(二)
    初识Python(五)
    初识Python(一)
    深入Python(三)
    一、MongoDB的下载、安装与部署
    浏览器上的javascript
    javascript中的事件
    扩展方法
    团队项目开题报告
  • 原文地址:https://www.cnblogs.com/zhengwenwei/p/3186507.html
Copyright © 2011-2022 走看看