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