[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();
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章