C#根據傳入的類名,方法名,執行此方法,或者反射賦值給委托


  • 傳入類的全名稱,和類中的方法名稱,然后執行此方法,或者賦值給委托。

在開發功能的時候,我總是會遇到一些業務場景,就是根據不同的參數或者配置,然后執行不同的業務邏輯。最基本的,都會想到用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");
  }
}
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM