dynamic關鍵字可充當C#類型系統中的靜態類型聲明。這樣,C#就獲得了動態功能,同時仍然作為靜態類型化語言而存在。
Var與dynamic:
var實際上編譯器拋給我們的語法糖,一旦被編譯,編譯器就會自動匹配var變量的實際類型,並用實際類型來替換該變量的聲明,等同於我們在編碼時使用了實際類型聲明。而dynamic被編譯后是一個Object類型,編譯器編譯時不會對dynamic進行類型檢查。
dynamic與反射
以前我們這樣使用反射:
public
class
DynamicSample
{
public
string
Name {
get
;
set
; }
public
int
Add(
int
a,
int
b)
{
return
a + b;
}
}
DynamicSample dynamicSample =
new
DynamicSample();
//create instance為了簡化演示,我沒有使用反射
var
addMethod =
typeof
(DynamicSample).GetMethod(
"Add"
);
int
re = (
int
)addMethod.Invoke(dynamicSample,
new
object
[] { 1, 2 });
現在,我們有了簡化的寫法:
dynamic dynamicSample2 =
new
DynamicSample();
int
re2 = dynamicSample2.Add(1, 2);