zoukankan      html  css  js  c++  java
  • 反射

    Start with:反射反射程序员的快乐。

    1、 反射中心思想

    实现动态可扩展应用程序

    反射的核心是Type类,这个类封装了关于类型的元素据,CLR拿着Type信息就可以创建相应的类型。

    2、 代码执行过程

    C# => 编译器 => DLL/EXE =>CLR/JIT => 机器码

                        

            metadata(清单元数据)  IL(中间代码)

     

    3、 反射创建类型步骤

    第一步:动态加载程序集   Assembly.Load(“Ruanmou.DB.MySql”)

    第二步:获取类型 Type type = assembly.GetType(“Ruanmou.DB.MySql.MySqlHelper”)

    第三步:创建对象 object helper = Activator.CreateInstance(type)

                                  Dynamic/接口类型

    4、 破坏单例

    单例的实现:

           (1)、构造函数私有化

            (2)、静态字段

            (3)、静态构造函数里实例化

    反射会破坏单例:Activator.CreateInstance(type, true)

    5、 泛型类、泛型犯法的反射调用

    泛型类:

    Type type = assembly.GetType(“Ruanmou.DB.SqlServer.GenericClass`3”)

    Type typeMake = type.MakeGenericType(new Type[]{typeof(int), typeof(string)})

    泛型方法:

    MethodInfo method = type.GetMethod(“Show”)

    Var methodNew = method.MakeGenericMethod(new Type[]{…})

    methodNew.Invoke(object,参数列表);  //静态方法调用时可以不用传object

    6、泛型的应用

           MVC(无法方法重载反射不支持,只能HttpMethod+特性)

    AOP 反射调用方法可以在防范前后执行点别的,只需要在方法上加上一些特性

    IOC

    7、反射的缺点

    (1) 使用麻烦

    (2) 避开编译器的检查

    (3) 性能(程序启动时就将类型加载在缓存中,且一次正常构造和一次反射构造之间的性能差异可以忽略不记,在上了一定数量级之后性能差异才会显现,要不为啥那么多技术都用反射)

  • 相关阅读:
    (五)STL序列容器(deque)
    (四)STL序列容器(vector)
    (三)STL序列容器(array)
    (六)c语言之指针与函数、数组用法
    (五)c语言之内存分配
    (三)c++模板函数与函数模板详解
    Linux基础(03)gdb调试
    Linux基础(02)MakeFile的创建和使用
    Linux基础(01)开发环境的搭建
    Windows的socket编程
  • 原文地址:https://www.cnblogs.com/fat-girl/p/14760332.html
Copyright © 2011-2022 走看看