使用dynamic類型改進反射

首先仍是聲明一下,使用場景:函數

一、若是編譯時函數名稱肯定,對象類型運行時肯定,那麼運用dynamic是一個好主意。
二、若是編譯時函數名稱肯定,對象類型在編譯時也肯定,那就既不須要反射也不須要dynamic。
三、若是函數名稱在運行時才能肯定的話,那函數名稱就是一個字符串,必須使用反射來完成。性能

 

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

假設咱們須要反射調用的函數是:對象

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

傳統的調用通常是:string

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());it

}編譯

使用dynamic改良以後:class

class Program
{
  static dynamic reflectObj = null;object

  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();
  }
}

 

少了一步反射生產 函數 的步驟,也對咱們後面進行的反射性能調優有着很是大的幫助:)

相關文章
相關標籤/搜索