解读C#中的事件转嫁

 /// <summary>
 /// 事件转嫁类
 /// </summary>
 public class EventDeliver
 {
             /// <summary>
             /// 转嫁事件
             /// </summary>
             /// <param name="eventDeclareObject">原始事件包含对象</param>
             /// <param name="eventDeclareName">原始事件名称</param>
             /// <param name="eventHandleObject">目标事件响应对象</param>
             /// <param name="eventHandleName">目标事件响应方法</param>
             public static void Deliver(object eventDeclareObject,string eventDeclareName,object eventHandleObject, string eventHandleName)
             {
                          EventInfo eventInfo = eventDeclareObject.GetType().GetEvent(eventDeclareName,BindingFlags.Instance |BindingFlags.Static | BindingFlags.Public);
                          if (eventInfo == null)
                          {
                                       throw new ArgumentException();
                          }
                          if (eventInfo.GetAddMethod().IsStatic || eventInfo.GetRemoveMethod().IsStatic)
                          {
                                       throw new ArgumentException();
                          }            
                          Delegate handlerDelegate = Delegate.CreateDelegate(eventInfo.EventHandlerType,eventHandleObject,eventHandleName);
   eventInfo.AddEventHandler(eventDeclareObject,handlerDelegate);
             }
  
 }
 /// <summary>
 /// 事件响应
 /// </summary>
 public class EventHandleObject
 {
             public void InvokerEventHandler(object sender, EventArgs e)
             {
                          Console.WriteLine("转嫁事件响应方法被调用");
             }
 }
 /// <summary>
 /// 事件源
 /// </summary>
 public class EventSourceObject
 {
             public event EventHandler SharpnessDotNetCallMe;
             public void FireEvent()
             {
                          SharpnessDotNetCallMe(null,null);
             }
 }
 
 class Application
 {
             [STAThread]
             static void Main(string[] args)
             {
                          //原始方法
                          EventSourceObject sender1 = new EventSourceObject();
                          sender1.SharpnessDotNetCallMe += new EventHandler(sender1_SharpnessDotNetCallMe);   
                          sender1.FireEvent();//触发事件
                          //转嫁方法
                          EventSourceObject sender2 = new EventSourceObject();
                          EventHandleObject handler = new EventHandleObject();
                          EventDeliver.Deliver(sender2,"SharpnessDotNetCallMe",handler,"InvokerEventHandler"); 
                          //触发事件
                          sender2.FireEvent();
                          Console.Read();
             }
             private static void sender1_SharpnessDotNetCallMe(object sender, EventArgs e)
             {
                          Console.WriteLine("原始事件响应方法被调用");
             }
 }

//输出效果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值