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();
  • 相关阅读:
    Lambda表达式
    工具类:mybatis中使用Threadlocal开启session及关闭session
    构造函数
    window phone ListBox多选
    ZOJ 3681 ZJU2013年01月月赛F题 E Cup 2
    2012百度之星冬季赛第四场第二题 度熊的复仇
    HDU 4476 HDOJ Cut the rope
    HDU 4475 HDOJ Downward paths
    2012百度之星冬季赛第二场第二题 消去游戏I
    ZOJ 3684 ZJU2013年01月月赛I题 Destroy
  • 原文地址:https://www.cnblogs.com/poli/p/4375915.html
Copyright © 2011-2022 走看看