反射笔记 我一直在不断学习
反射笔记?? 笔记以问题的形式记录,搞清楚这些问题,就是理解了反射.本笔记为阅读博客园中张子阳的文章之后所做的笔记,更多详细的记录,请访问这里. 1.???? 反射的基础是什么? 程序集,自定义特性,泛型. 2.???? 反射是什么? 是一种在运行时获得程序集或者类型的基本信息和元数据的机制. 3.???? 反射有什么用途? ?? (作者的一个例子是绑定下拉列表.)分三类: 1)????? 查看或者遍历类型或者程序集的基本信息或者元数据; 2)????? 动态的获得类型的实例,并调用它的成员. 3)????? 迟绑定(这个我还不明白,但是我知道替代分支语句的就是迟绑定). 4.???? 获得Type对象的三种方法?(也许不止三种,暂时我就记这三种) ? 2)????? typeof(类型的名称(带上命名空间)); ?? 3)????? 类型的实例.GetType(); 5.获得程序集的两种方法?(也许不止两种,暂时我就记这三种) 1)????? Assembly.loadFrom(“程序集的名称.dll(全路径的,如果当前程序引用了直接写名称.dll)”); 2)????? Assembly.load(“程序集的名称”); ?? 6.Type和程序集的关系辩证?(若不对,欢迎指正啊!) 通过Type可以获得类型所在的程序集,程序集包含很多类型(Type).但是最终获得成员信息主要是通过Type进行的,获得类型的基本信息跟获得程序集的基本信息有些不一样,类型的基本信息肯定没有module。 7.怎么通过Type的实例获得该类型的成员信息? 1)??????获得成员 MemberInfo[] memberinfos=type.GetMembers();//获得类型的所有成员; MemberInfo[] memberinfos=type.GetMembers(BindingFlags的枚举类型);//还可根据参数重载获得需要的成员。 2)??????获得方法 MemberInfo[] MethodInfo[] 3)??????获得字段 FieldInfo[] fields=type.GetFields();//获得所有字段,可以重载 4)??????获得属性 PropertyInfo[] fields = type.GetProperties(); ??? 5)??????获得构造函数 ConstructorInfo[] cons = type.GetConstructors(); 6)获得事件 EventInfo[] events= type.GetEvents(); 7)自定义特性 ?Object[] objects = type.GetCustomAttributes(typeof(ObsoleteAttribute),true); 8)基本信息 使用vs的提示,获得类型对象之后,可以看到如下信息,这些就是Type可以获得的类型基本信息。 动态获得类型的实例有两种方法:分别如下, ?Object obj = asm.CreateInstance("String",true); ?Object obj1 = asm.CreateInstance("String",true,BindingFlags.Default,null,newObject[]{},null); ObjectHandle handle= Activator.CreateInstance(null,"String"); 调用方法: 使用InvokeMember调用方法 type.InvokeMember("subString",BindingFlags.InvokeMethod,typeof(System.String),new Object[] { }); 使用MethodInfo.Invoke调用方法 MethodInfo ms = type.GetMethod("subString",BindingFlags.Instance); ms.Invoke(obj,new Object[] { }); ? (编辑:北几岛) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |