/// <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("原始事件响应方法被调用");
}
}
//输出效果