Tip15 使用dynamic來簡化反射實現

Tip15 使用dynamic來簡化反射實現

dynamic是Framework 4.0的新特性。dynamic的出現讓C#具有了弱語言的特性,編譯器默認dynamic對象支持開發者想要的任何特性。

var和dynamic完全是兩個概念。var實際上是“語法糖”,編譯器會自動匹配var變量的實際類型,並用實際類型來替換該變量的聲明。而dynamic被編譯後實際是一個object類型,不過編譯器不會對dynamic進行任何的類型檢查,在運行期才進行類型檢查。

利用dynamic可以簡化C#中的反射語法,例如:

    public class DynamicSample
    {
        public string Name { get; set; }
        public int Add(int a,int b)
        {
            return a + b;
        }
    }

調用測試5000000次,比較dynamic和傳統的反射效率:

            int times = 5000000;
            DynamicSample reflectSample = new DynamicSample();
            var addMethod = typeof(DynamicSample).GetMethod("Add");

            Stopwatch watch1 = Stopwatch.StartNew();
            for (int i = 0; i < times; i++)
            {
                addMethod.Invoke(reflectSample, new object[] { 1, 2 });
            }
            Console.WriteLine(string.Format("反射耗時:{0} 毫秒", watch1.ElapsedMilliseconds));

            Stopwatch watch2 = Stopwatch.StartNew();
            dynamic dynamicSample = new DynamicSample();
            for (int i = 0; i < times; i++)
            {
                dynamicSample.Add(1, 2);
            }
            Console.WriteLine(string.Format("dynamic耗時:{0} 毫秒", watch2.ElapsedMilliseconds));

結果如下:

反射耗時:2264 毫秒
dynamic耗時:226 毫秒
發佈了52 篇原創文章 · 獲贊 24 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章