一、 利用反射獲得委托類型并創(chuàng)建委托實例
using System;using System.Reflection;namespace ConsoleApplication1{public class Test{public delegate void delegateTest(string s);public void method1(string s){Console.WriteLine("Create Delegate Instance: " + s);}}class Program{static void Main(string[] args){Test test = new Test();Type t = Type.GetType("ConsoleApplication1.Test");// 因為委托類型編譯后是作為類的嵌套類型的,所以這里通過GetNestedType(String s)的方法來獲得委托類型。Type nestType = t.GetNestedType("delegateTest");MethodInfo method =test.GetType().GetMethod("method1", BindingFlags.Public | BindingFlags.Static|BindingFlags.Instance);if (method != null){// 創(chuàng)建委托實例Delegate method1 = Delegate.CreateDelegate(nestType, test, method);//動態(tài)調(diào)用委托實例method1.DynamicInvoke("Hello");}Console.Read();}}}
二、 利用反射獲得事件類型和綁定事件處理程序
using System;using System.Reflection;namespace ConsoleApplication2{public class Test{public event EventHandler TestEvent;public void Triggle(){if (TestEvent != null){TestEvent(this, null);}}}class Program{static void Main(string[] args){Test testT=new Test();EventInfo eventinfo = typeof(Test).GetEvent("TestEvent");if (eventinfo != null){// 為事件動態(tài)綁定處理程序eventinfo.AddEventHandler(testT, new EventHandler(triggleEvent));testT.Triggle();}Console.Read();}public static void triggleEvent(object sender, EventArgs e){Console.WriteLine("Event has been Triggled");}}}