[C#学习笔记] - var与dynamic的区别和应用

区别

  1. var是编译器的语法糖,在编译期检查。
  2. dynamic是运行时解析。编译期不做任何检查。

示例

未知函数F(),有返回值。dynamic格式的返回值可以任意操作,且能通过编译。但var只是语法糖,数据结构仍与F函数的返回值一致,无法做到任意操作。

dynamic a = F();
a.good = 10;

var b = F();
b.good = 10; // 该行编译检查报错

dynamic的反射应用

class Test
{
	public int F1() => 1;
	private int F2(int a, int b) => 2;
}
  1. 不使用dynamic的反射实现
var t = typeof(Test);
Test obj = new Test();
// 或 Test obj = Activator.CreateInstance(t);

// 反射共有方法,无参数
var m1 = t.GetMethod("F1"); 
// 反射私有方法,带参数
var m2 = t.GetMethod("F2", BindingFlags.NonPublic | BindingFlags.Instance); 

var ret1 = (int)m1.Invoke(obj, null);
var ret2 = (int)m2.Invoke(obj, new object[] {1,2});
  1. 使用dynamic
dynamic obj = new Test();
var ret = obj.F1();
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值