美文网首页
C#【唐老狮】反射

C#【唐老狮】反射

作者: Die时而动 | 来源:发表于2022-07-30 23:34 被阅读0次

    反射

    反射概念和关键类TYpe

    • 程序集
      • 经由编译器编译得到,进一步编译执行的中间产物
        • dll文件
      • 扩展:C语言编译过程
        • 预处理
        • 编译
        • 汇编:目标文件
        • 链接:可执行文件
    • 元数据
      • 描述数据的数据
        • 程序或类型的数据,存放在程序集中
    • 反射概念
      • 运行时(程序加载到内存中变为进程)查看本身或其他程序的元数据的行为
    • 反射作用
      • 运行时得到所有元数据
      • 运行时实例化对象,操作对象
      • 运行时调用其他程序集里的代码
    • Type:类的反射信息类
      • 获取Type
        • object.GetType()
        • typeof(类名)
        • Type.GetType("包含命名空间的类名")
        • 指向同一类 元数据的Type引用指向同一个地址
      • 获取程序集
        • Type.Assembly
      • 获取所有公共成员
        • MemberInfo类
        • Type.GetMembers()
      • 获取类的公共构造函数
        • 获取所有构造函数
          • ConstructorInfo类
          • type.GetConstructors()
        • 获取其中一个构造函数并执行
          • 得到构造函数传入Type数组(构造函数形参)
            • Type.GetContructor(new Type[0]) 无参构造
            • Type.GetConstuctor(new Type[]{typeof(形参类型)})
          • 执行构造函数,传入object数组(构造函数形参)
            • ConstructorInfo.Invoke(null) 无参构造
            • ConstructorInfo.Invoke(new object[]{实参})
      • 获取类的公共成员变量
        • 获取所有成员变量
          • FieldInfo类
          • Type.GetFields()
        • 获取指定名称公共成员变量
          • Type.GetField("成员变量名")
        • 通过反射获取和设置指定对象的值
          • FieldInfo.GetValue(指定对象引用)
          • FieldInfo.SetValue(指定对象引用)
      • 获取类的公共成员方法
        • MethodInfo类
        • 获取所有公共方法
          • Type.GetMethods()
        • 获取指定方法
          • Type.GetMethod("方法名",new Type[]{typeof(形参类型)})
        • 调用方法
          • MethodInfo.Invoke(方法名,new object[]{实参})

    反射关键类Assembly和Activator

    • Activator
      • 作用
        • 快速实例化对象(静态方法)
      • 使用
        • 无参构造
          • Activator.CreateInstance(Type)
        • 有参构造
          • Activator.CreateInstance(Type,实参)
    • Assembly
      • 作用
        • 加载程序集并使用程序集
      • 使用
        • Assembly类
        • 加载指定程序集
          • Assembly.Load("程序集名称")同一文件下程序集
          • Assembly.LoadFrom("路径字符串")不同文件下程序集
            • Assembly.LoadFile("路径字符串")
        • 加载程序集中的类对象
          • Assembly.GetTypes()获取所有元数据类
          • Assembly.GetType("完整类名")
    • 类库工程
      • 纯逻辑代码,自身不可执行,提供逻辑给别人用

    相关文章

      网友评论

          本文标题:C#【唐老狮】反射

          本文链接:https://www.haomeiwen.com/subject/wgulwrtx.html