- 傳入類的全名稱,和類中的方法名稱,然后執行此方法,或者賦值給委托。
在開發功能的時候,我總是會遇到一些業務場景,就是根據不同的參數或者配置,然后執行不同的業務邏輯。最基本的,都會想到用if else,或者switch處理。
如果這種這種根據不同配置,執行不同邏輯在情況很多的時候,就會寫很多這種判斷,不利於閱讀和擴展。如果做成委托形式,就可以不寫這種邏輯代碼。
根據傳入的類全名稱和方法名稱,然后反射出對象和方法,再賦值給委托,然后再執行,就可以不寫這種邏輯判斷。
using System; using System.Reflection; using System.Threading; namespace reflector { class Program { public delegate void shuchu();//定義的委托 static void Main(string[] args) { //傳入的類全名稱 string className = "reflector.myclass"; //得到此類的類型 Type type = Type.GetType(className); // 獲取當前程序集 Assembly assembly = Assembly.GetExecutingAssembly(); //動態創建當前類型的對象 dynamic obj = assembly.CreateInstance(type.FullName); //根據傳入的方法名獲取當前類型的方法 MethodInfo mthof = type.GetMethod("writemyseage"); //執行此方法,如果此方法有參數,則傳入參數 mthof.Invoke(obj,null);//輸出“hello” //兩種方法動態賦值給委托。 Delegate myshuchu2 = mthof.CreateDelegate(typeof(shuchu),obj); Delegate myshuchu1 = Delegate.CreateDelegate(typeof(shuchu),obj,mthof); //執行委托 myshuchu1.DynamicInvoke(null);//輸出“hello” myshuchu2.DynamicInvoke(null);//輸出“hello” } } class myclass{ public myclass(){} public void writemyseage(){ Console.Write("hello"); } } }