首先還是聲明一下,使用場景:
1、如果編譯時函數名稱確定,對象類型運行時確定,那麼運用dynamic是一個好主意。
2、如果編譯時函數名稱確定,對象類型在編譯時也確定,那就既不需要反射也不需要dynamic。
3、如果函數名稱在運行時才能確定的話,那函數名稱就是一個字符串,必須使用反射來完成。
那麼我們肯定是是在第一種情況中使用dynamic類型改進反射:(編譯時函數名稱確定,對象類型運行時確定)
假設我們需要反射調用的函數是:
ClassLibrary
{
Demo
{
GetName()
{
name = "dddd";
name;
}
}
}
傳統的調用一般是:
Main([] args)
{
typeinfo = .Load("ClassLibrary").GetType("ClassLibrary.Demo");
instance = .Load("ClassLibrary").CreateInstance("ClassLibrary.Demo");
me = typeinfo.GetMethod("GetName");
ret = me.Invoke(instance, );
.WriteLine(ret.ToString());
}
使用改良之後:
Program
{
reflectObj = ;
([] args)
{
if (reflectObj == )
{
reflectObj = .Load("ClassLibrary").CreateInstance("ClassLibrary.Demo");
}
rrr = reflectObj.GetName();
.WriteLine(rrr.ToString());
.ReadKey();
}
}
少了一步反射生產 函數 的步驟,也對我們後面進行的反射性能調優有著非常大的幫助:)