zoukankan      html  css  js  c++  java
  • 反射的学习

    反射提供了封装程序集、模块和类型的对象(Type 类型)。可以使用反射动态创建类型的实例,将类型绑定到现有对象,或从现有对象获取类型并调用其方法或访问其字段和属性。
    反射是.Net中获取运行时类型信息的方式,.Net的应用程序由几个部分:‘程序集(Assembly)’、‘模块(Module)’、‘类型(class)’组成,而反射提供一种编程的方式,让程序员可以在程序运行期获得这几个组成部分的相关信息,例如:Assembly类可以获得正在运行的装配件信息,也可以动态的加载装配件,以及在装配件中查找类型信息,并创建该类型的实例。Type类可以获得对象的类型信息,此信息包含对象的所有要素:方法、构造器、属性等等,通过Type类可以得到这些要素的信息,并且调用之。MethodInfo包含方法的信息,通过这个类可以得到方法的名称、参数、返回值等,并且可以调用之。

    反射在下列情况下很有用

    1. 需要访问程序元数据的属性。
    2. 检查和实例化程序集中的类型。
    3. 在运行时构建新类型。使用 System.Reflection.Emit 中的类。
    4. 执行后期绑定,访问在运行时创建的类型的方法。

    举例

    using System;
    namespace MyGeneric
    {
        public class MyReflection
        {
    
            public void GetType<T>(T param)
            {
                Console.WriteLine(param.ToString() + "---" + param.GetType());
            }
    
            public static void GetStaticType(string param)
            {
                Console.WriteLine(param.ToString() + "---" + param.GetType());
            }
        }
    }

    反射的使用

    ```  调用类MyGeneric.MyReflection中GetType方法
    Assembly assembly = Assembly.Load("MyGeneric");
    dynamic myreflection = Activator.CreateInstance(assembly.GetType("MyGeneric.MyReflection"));
    myreflection.GetType("1233");
    或者
    Type tes = typeof(MyReflection);
    dynamic myreflection1 = Activator.CreateInstance(tes);
    myreflection1.GetType("2");
    ```
    ``` 调用静态方法
    Type tes = typeof(MyReflection);
    tes.InvokeMember("GetStaticType",
        System.Reflection.BindingFlags.InvokeMethod |
        System.Reflection.BindingFlags.Static |
        System.Reflection.BindingFlags.Public, null, null, new object[] { "assd" });
    ```
  • 相关阅读:
    python调用c++动态库报错
    Python自动化测试常用库整理
    Linux kswapd0 进程CPU占用过高快速处理方法
    Linux安装jdk8及环境变量配置
    免费的网站安全检查和恶意软件扫描程序
    【Java】对象的创建、初始化和使用
    【Java】数组的创建、遍历和复制
    【Java】Java 语言中流程控制语句(分支语句、循环语句、转移语句)的一些新特性
    【Java】Java 语言中操作符的一些新特性
    【Java】常量与变量(局部变量、成员变量)
  • 原文地址:https://www.cnblogs.com/zhao123/p/9452247.html
Copyright © 2011-2022 走看看