zoukankan      html  css  js  c++  java
  • 使用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还有一个优点就是,比没有优化过的反射性能好,跟优化过的反射性能相当,但代码整洁度高,作者也是贴了代码并贴出运行结果而已,没有作过多的介绍,所以此处作罢了。

  • 相关阅读:
    接口和抽象的区别
    接口
    jquery Ajax提交表单数据
    SQL 检查 是否存在 表 临时表
    ASP.NET MVC 设置Area中 Controller 的方法 默认启动页
    json 序列化为数组
    C# Lamda中类似于SQL 中的 In 功能
    各种webservice调用地址
    ASP.NET获取客户端IP地址
    C#反射机制 Type类型
  • 原文地址:https://www.cnblogs.com/Chavezcn/p/7567056.html
Copyright © 2011-2022 走看看