• c# 反射


    //0、动态加载 程序集 文件 利用Assembly类

    Assembly assembly = Assembly.LoadFile("c:	est.dll");
    Type[] type = assembly.GetTypes(); //私有,公有所有类都能获取到
    Type type_single = assembly.GetType("test.person"); //只拿到 指定的类 参数为“完全限定名称”。即 命名空间.类名
    Type[] type_public = assembly.GetExportedTypes(); //只获取 公有 类型
    

    //1、获取Type类型 两种方式

    Person p=new Person ();
    Type type1 = p.GetType(); //当有对象的时候 使用GetType
    Type type2 = typeof(Person);//当没有对象的时候 使用typeof
    

    //2、获取类型元数据 中的所有方法 (获取所有Public方法。包括属性方法和父类继承下来的方法。不包括私有方法。要获取私有方法需要使用其他方式)

    MethodInfo[] methods=type2.GetMethods();
    for (int i = 0; i < methods.Length; i++)
    {
    Console.WriteLine(methods[i].Name.ToString());
    }
    

    //调用方法 第一个参数需要通过反射创建对象

    MethodInfo method_single = type2.GetMethod("SayHi"); //如果方法重载 则需要type2.GetMethod("SayHi",new Type[]{typeof(int),typeof(string)})
    object obj = Activator.CreateInstance(type2); //第一个参数
    object result = method_single.Invoke(obj, new object[] { 100, 200 }); //利用Invoke方法 带参数调用,不带参数 method_single.Invoke(obj,null);
    

    //3、获取 类型元数据 中的所有属性

    PropertyInfo[] properties= type2.GetProperties();
    for (int i = 0; i < properties.Length; i++)
    {
    Console.WriteLine(properties[i].Name.ToString());
    }
    //属性赋值
    PropertyInfo property = type2.GetProperty("Name");
    object obj2 = Activator.CreateInstance(type2); //第一个参数
    property.SetValue(obj2,"刘志新",null);
    property.GetValue(obj2, null);//获取属性

    //4、获取 类型元数据中 所有字段 (私有的获取不到)

    FieldInfo[] fields=type2.GetFields();
    for (int i = 0; i < fields.Length; i++)
    {
    Console.WriteLine(fields[i].Name.ToString());
    }
    

    //5、类中还有好多的东东,都可以通过.get 来获取。自己看吧

  • 相关阅读:
    Mac environment setting
    详解nginx.conf文件配置项(包括负载均衡)
    检查windows端口被占用
    linux下的环境变量
    利用MVC思想和php语言写网站的心得
    React学习:列表&&Key
    React学习:条件渲染
    事件处理
    state&生命周期
    react学习:组件&props
  • 原文地址:https://www.cnblogs.com/crhdyl/p/4902967.html
Copyright © 2020-2023  润新知