Tip15 使用dynamic来简化反射实现

来源:互联网 发布:12864取模软件 编辑:程序博客网 时间:2024/05/19 13:59

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 毫秒
原创粉丝点击