使用dynamic類型改進反射


首先還是聲明一下,使用場景:

1、如果編譯時函數名稱確定,對象類型運行時確定,那么運用dynamic是一個好主意。
2、如果編譯時函數名稱確定,對象類型在編譯時也確定,那就既不需要反射也不需要dynamic。
3、如果函數名稱在運行時才能確定的話,那函數名稱就是一個字符串,必須使用反射來完成。

 

那么我們肯定是是在第一種情況中使用dynamic類型改進反射:(編譯時函數名稱確定,對象類型運行時確定)

假設我們需要反射調用的函數是:

namespace ClassLibrary
{
  public class Demo
  {
    public string GetName()
    {
      String name = "dddd";
      return name;
    }
  }
}

傳統的調用一般是:

static void Main(string[] args)
{
  Type typeinfo = Assembly.Load("ClassLibrary").GetType("ClassLibrary.Demo");
  object instance = Assembly.Load("ClassLibrary").CreateInstance("ClassLibrary.Demo");
  MethodInfo me = typeinfo.GetMethod("GetName");
  object ret = me.Invoke(instance, null);
  Console.WriteLine(ret.ToString());

}

使用dynamic改良之后:

class Program
{
  static dynamic reflectObj = null;

  static void Main(string[] args)
  {
    if (reflectObj == null)
    {
      reflectObj = Assembly.Load("ClassLibrary").CreateInstance("ClassLibrary.Demo");
    }
    object rrr = reflectObj.GetName();

    Console.WriteLine(rrr.ToString());

    Console.ReadKey();
  }
}

 

少了一步反射生產 函數 的步驟,也對我們后面進行的反射性能調優有着非常大的幫助:)

 

 

 


免責聲明!

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



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