zoukankan      html  css  js  c++  java
  • 使用反射动态绑定与移除方法

            public void AddPublisher(object publisher, string eventName)
            {
                publishers.Add(publisher);
                EventInfo targetEvent = publisher.GetType().GetEvent(eventName);
                GuardEventExists(eventName, publisher, targetEvent);

                MethodInfo addEventMethod = targetEvent.GetAddMethod();
                GuardAddMethodExists(targetEvent);//检测是否存在这样的方法

                EventHandler newSubscriber = OnPublisherFiring;
                addEventMethod.Invoke(publisher, new object[] { newSubscriber });
            }

            public void RemovePublisher(object publisher, string eventName)
            {
                publishers.Remove(publisher);
                EventInfo targetEvent = publisher.GetType().GetEvent(eventName);
                GuardEventExists(eventName, publisher, targetEvent);

                MethodInfo removeEventMethod = targetEvent.GetRemoveMethod();
                GuardRemoveMethodExists(targetEvent);

                EventHandler subscriber = OnPublisherFiring;
                removeEventMethod.Invoke(publisher, new object[] {subscriber});
            }

  • 相关阅读:
    单例模式
    建造者模式
    工厂方法模式
    原型模式
    适配器模式
    桥接模式
    装饰模式
    组合模式
    多线程的学习与GDI的学习
    我们复习.Net的这些日子里
  • 原文地址:https://www.cnblogs.com/wdfrog/p/1986686.html
Copyright © 2011-2022 走看看