zoukankan      html  css  js  c++  java
  • 反射

    7、 反射:
    -> 什么是反射
    万物接对象,类描述对象,而类也是对象,描述操作类的这套方法就是反射
    -> 如何反射
    -> 获得类型中所有成员的名字
    Type类是用来描述类型的类
    获得Type:
    对象.GetType();
    typeof(类型名)
    -> 动态的调用dll中的方法

    -> 反射用法
    	-> 使用Assimbly.Load(文件路径)获得Assembly对象
    	-> 使用Assembly对象的GetType方法获得Type
    	-> 使用类型获得Type对象
    	-> 使用Type对象获得成员对象
    	-> 会用Activator.CreateInstance(type)创建对象
    	-> 使用成员对象.Invoke(o, 参数)实现调用
    

    Activator.CreateInstance(Type t)会动态调用类的无参构造函数创建一个对象,返回值就是创建的对象,如果类没有无参构造函数就会报错。
    GetConstructor(参数列表);//这个是找到带参数的构造函数。
    Type类的方法:在编写调用插件的程序时,需要做一系列验证。
    bool IsAssignableFrom(Type c):(直译:是否可以从c赋值)判断当前的类型的变量是不是可以接受c类型变量的赋值。
    typeof(IPlugin).IsAssignableFrom(t)
    bool IsInstanceOfType(object o):判断对象o是否是当前类的实例(当前类可以是o的类、父类、接口)
    bool IsSubclassOf(Type c):判断当前类是否是类c的子类。类的事,没有接口的事。
    IsAbstract,判断是否为抽象的,含接口

    MemberInfo类 抽象类,有很多子类,下面讲的类都继承自它,获取程序集成员的相关信息(类型、方法、事件、字段和属性)
    PropertyInfo 获取属性
    主要成员:CanRead、CanWrite、PropertyType属性类型;SetValue、GetValue:读取值,设置值,第一个参数是实例对象,因为set、get要针对具体实例,最后一个参数null。pInfo.SetValue(p1, 30, null)
    MethodInfo 获取方法
    MethodInfo都是和具体对象不相关的,所以需要第一个参数指定要执行的对象。
    FieldInfo 获取字段
    EventInfo 获取事件

    MemberInfo[] ms= type.GetMembers();

            foreach (MemberInfo m in ms)
            {
                if(m.MemberType==MemberTypes.Method)
                {
                    Console.WriteLine(m.Name);
                }
                
            }
    

    // jklib.dll
    Assembly asm = Assembly.LoadFile(Path.GetFullPath("jklib.dll"));

            Type t = asm.GetType("jklib.Class1");
    
            MethodInfo m = t.GetMethod("Func", BindingFlags.NonPublic | BindingFlags.Instance);
    
            object o = Activator.CreateInstance(t);
    
            
            m.Invoke(o, null);
    
    
            Console.ReadKey();
  • 相关阅读:
    学习web前端怎样入门?初学者赶紧看过来!
    web前端教程:CSS 布局十八般武艺都在这里了
    [zhuan]arm中的汇编指令
    adb命令
    [zhuan]使用uiautomator做UI测试
    [zhuan]java发送http的get、post请求
    Android 关于“NetworkOnMainThreadException”出错提示的原因及解决办法
    android getpost代码
    [转]Android 如何根据网络地址获取网络图片方法
    Android Json解析与总结
  • 原文地址:https://www.cnblogs.com/poli/p/4375915.html
Copyright © 2011-2022 走看看