加入收藏 | 设为首页 | 会员中心 | 我要投稿 北几岛 (https://www.beijidao.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

反射笔记 我一直在不断学习

发布时间:2021-05-21 07:30:49 所属栏目:大数据 来源: https://www.jb51.cc
导读:反射笔记 ?? 笔记以问题的形式记录 , 搞清楚这些问题 , 就是理解了反射 . 本笔记为阅读博客园中张子阳的文章之后所做的笔记 , 更多详细的记录 , 请访问 这里 . 1. ???? 反射的基础是什么 ? 程序集 , 自定义特性 , 泛型 . 2. ???? 反射是什么 ? 是一种在运行

反射笔记

?? 笔记以问题的形式记录,搞清楚这些问题,就是理解了反射.本笔记为阅读博客园中张子阳的文章之后所做的笔记,更多详细的记录,请访问这里.

1.???? 反射的基础是什么?

程序集,自定义特性,泛型.

2.???? 反射是什么?

是一种在运行时获得程序集或者类型的基本信息和元数据的机制.

3.???? 反射有什么用途?

?? (作者的一个例子是绑定下拉列表.)分三类:

1)????? 查看或者遍历类型或者程序集的基本信息或者元数据;

2)????? 动态的获得类型的实例,并调用它的成员.

3)????? 迟绑定(这个我还不明白,但是我知道替代分支语句的就是迟绑定).

4.???? 获得Type对象的三种方法?(也许不止三种,暂时我就记这三种)
?? 1)????? Type.GetType(“类型的名称(带上命名空间)”)

? 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[]
methods=type.FindMembers(MemberTypes.Method,BindingFlags的枚举类型,Type.FilterName,”*”);//第一个参数说明获得的是方法,第二个是条件,第三个是按照名字过滤,第四个表示返回所有的方法。

MethodInfo[]
methods=type.GetMethods();//

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可以获得的类型基本信息。
?8.怎么动态的获得类型的实例,并调用它的方法?

动态获得类型的实例有两种方法:分别如下,

?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[] { });

?

(编辑:北几岛)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读