首先仍是聲明一下,使用場景:函數
一、若是編譯時函數名稱肯定,對象類型運行時肯定,那麼運用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();
}
}
少了一步反射生產 函數 的步驟,也對咱們後面進行的反射性能調優有着很是大的幫助:)