zoukankan      html  css  js  c++  java
  • c#反射应用

    接上篇更新:

    1.什么是反射

    反射:Reflection,System.Reflection命名空间,是微软提供的帮助类库

    反射加载dll,读取程序集(Assembly),模块(Module),类(Class),方法(Method)

    Dll包括:IL和metada

    IL:中间语言,标准的面向对象语言,但是不太好阅读

    Medata:元数据,数据清单,只是描述了类中有什么

    反射破坏单例其实就是反射可以调用私有构造函数

    2.反射的优缺点

      优点:1.降低耦合性,提高自适应能力。[减少对象与对象之间的依赖,只需要知道类名(字符串),方法名(字符串),就可以调用]

            2.允许程序创建和控制任何类的对象,无需提前硬编码目标类[可以突破特定权限,可以做到普通方式无法做到的比如可以通过反射调用私有方法]

    缺点:1.编写比较困难,代码量大,编写的时候容易出错

         2. 性能问题,性能损耗大,经过测试:发现反射确实性能损耗比较大 普通方式:60, 反射:5470,确实让我们无法接受,经过缓存优化之后发现,普通方式:42反射:80,对于性能损耗,大家要理性看待,因为执行的数量巨大,中间的这些性能损耗是可以忽略不计。

     

     

    反射的使用

     

    使用LoadFile加载程序集

    使用LoadFrom加载程序集

     

    使用反射获取类型,创建对象

     使用反射+简单工厂+配置文件获取类型,创建对象

     

     

    反射选择不同构造函数创建对象

     

     反射调用方法

    反射调用普通方法

     

     反射调用有参数方法

     反射调用重载方法

     

     反射调用私有方法

     

     反射调用静态方法

     

     

     反射调用泛型方法,泛型类

    反射在普通类中调用泛型方法:

    反射在泛型类中调用泛型方法:

     

    另外一种:

     

     

    反射操作类内属性

     

     

     

  • 相关阅读:
    Django源码解析(1):启动程序
    python之importlib模块
    Django中间件:CsrfViewMiddleware
    Django的admin组件
    Linux学习之CentOS--CentOS6.4下Mysql数据库的安装与配置【转】
    C#读取Xml【转】
    在eclipse导入项目的步骤【转】
    Spring学习(一)——Spring中的依赖注入简介【转】
    Spring学习(二)——Spring中的AOP的初步理解[转]
    Spring之AOP
  • 原文地址:https://www.cnblogs.com/dqly/p/11692734.html
Copyright © 2011-2022 走看看