使用dynamic来简化反射实现,调用指定方法或构造函数_.NET_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > .NET > 使用dynamic来简化反射实现,调用指定方法或构造函数

使用dynamic来简化反射实现,调用指定方法或构造函数

 2017/9/21 10:38:26  Chavez.net  程序员俱乐部  我要评论(0)
  • 摘要:dynamic是Framework4.0的新特性,dynamic的出现让C#具有了弱语言类型的特性,编译器在编译的时候,不再对类型进行检查,不会报错,但是运行时如果执行的是不存在的属性或者方法,运行程序还是会抛出RuntimeBinderException异常。var与dynamic的区别var是编译器给我们的语法糖,编译期会匹配出实际类型并且替换该变量的声明。dynamic被编译后,实际是一个object类型,只不过编译器对dynamic做特殊处理,将类型检查放到了运行期
  • 标签:构造函数 方法 实现 使用 函数 构造 反射

dynamic是Framework4.0的新特性,dynamic的出现让C#具有了弱语言类型的特性,编译器在编译的时候,不再对类型进行检查,不会报错,但是运行时如果执行的是不存在的属性或者方法,运行程序还是会抛出RuntimeBinderException异常

 

var 与 dynamic 的区别

var是编译器给我们的语法糖,编译期会匹配出实际类型并且替换该变量的声明。

dynamic 被编译后,实际是一个object类型,只不过编译器对dynamic做特殊处理,将类型检查放到了运行期。

 

这从VS的编译器窗口可以看出来,var 声明的变量在VS中有智能提示,因为VS能推断出来实际类型;dynamic声明的变量没有智能提示。

 

利用dynamic 简化反射

 public class DynamicSample

    {

        public string Name { get; set; }

        public int Add(int a, int b)

        {

            return a + b;

        }

    }
 public partial class DynamicPage : System.Web.UI.Page

    {

        protected void Page_Load(object sender, EventArgs e)

        {

            //普通的反射做法

            DynamicSample dynamicSample = new DynamicSample();

            var addMethod = typeof(DynamicSample).GetMethod("Add");

            int res = (int)addMethod.Invoke(dynamicSample, new object[] { 1, 2 });

             

            //dynamic的做法,简洁,推荐

            dynamic dynamicSample2 = new DynamicSample();

            int res2 = dynamicSample2.Add(1, 2); //Add不会智能提示出来

        }

    }

使用dynamic还有一个优点就是,比没有优化过的反射性能好,跟优化过的反射性能相当,但代码整洁度高,作者也是贴了代码并贴出运行结果而已,没有作过多的介绍,所以此处作罢了。

上一篇: 电商总结(八)如何打造一个小而精的电商网站架构 下一篇: 没有下一篇了!
发表评论
用户名: 匿名