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

Reflection(反射)

发布时间:2020-12-16 01:18:54 所属栏目:百科 来源:网络整理
导读:一.反射介绍 反射是 .NET中的重要机制,通过反射,可以在运行时获得程序或程序集中每一个类型(包括类、结构、委托、接口和枚举等)的成员和成员的信息。 有了反射,即可对每一个类型了如指掌。另外我还可以直接创建对象,即使这个对象的类型在编译时还不知

一.反射介绍

反射是.NET中的重要机制,通过反射,可以在运行时获得程序或程序集中每一个类型(包括类、结构、委托、接口和枚举等)的成员和成员的信息。

有了反射,即可对每一个类型了如指掌。另外我还可以直接创建对象,即使这个对象的类型在编译时还不知道。

二.反射的用途

1.使用Assembly定义和加载程序集,加载在程序集清单中列出模块,以及从此程序集中查找类型并创建该类型的实例

2.使用Module了解包含模块的程序集以及模块中的类等,还可以获取在模块上定义的所有全局方法或其他特定的非全局方法

3.使用ConstructorInfo了解构造函数的名称、参数、访问修饰符(如pulic 或private)和实现详细信息(如abstract或virtual)等

4.使用MethodInfo了解方法的名称、返回类型、参数、访问修饰符(如pulic 或private)和实现详细信息(如abstract或virtual)等

5.使用FiedInfo了解字段的名称、访问修饰符(如public或private)和实现详细信息(如static)等,并获取或设置字段值

6.使用EventInfo了解事件的名称、事件处理程序数据类型、自定义属性、声明类型和反射类型等,添加或移除事件处理程序

7.使用PropertyInfo了解属性的名称、数据类型、声明类型、反射类型和只读或可写状态等,获取或设置属性值

8.使用ParameterInfo了解参数的名称、数据类型、是输入参数还是输出参数,以及参数在方法签名中的位置等

三.反射中主要用到的类介绍

1.System.Reflection.Assembly类

用于访问给定程序集的信息,或者把这个程序集加载到程序中

?

?

?部分方法介绍:

?

?2.System.Type类?

?System.Type 类对于反射起着核心的作用。但它是一个抽象的基类,Type有与每种数据类型对应的派生类,

?我们使用这个派生类的对象的方法、字段、属性来查找有关该类型的所有信息

?

?Type类的部分属性:
??????? Name 数据类型名
??????? FullName 数据类型的完全限定名(包括命名空间名)
??????? Namespace 定义数据类型的命名空间名
??????? IsAbstract 指示该类型是否是抽象类型
??????? IsArray?? 指示该类型是否是数组
??????? IsClass?? 指示该类型是否是类
??????? IsEnum?? 指示该类型是否是枚举
??????? IsInterface??? 指示该类型是否是接口
??????? IsPublic 指示该类型是否是公有的
??????? IsSealed 指示该类型是否是密封类
??????? IsValueType 指示该类型是否是值类型

??Type类的部分方法介绍:
??????? GetConstructor(),GetConstructors():返回ConstructorInfo类型,用于取得该类的构造函数的信息
??????? GetEvent(),GetEvents():返回EventInfo类型,用于取得该类的事件的信息
??????? GetField(),GetFields():返回FieldInfo类型,用于取得该类的字段(成员变量)的信息
??????? GetInterface(),GetInterfaces():返回InterfaceInfo类型,用于取得该类实现的接口的信息
??????? GetMember(),GetMembers():返回MemberInfo类型,用于取得该类的所有成员的信息
??????? GetMethod(),GetMethods():返回MethodInfo类型,用于取得该类的方法的信息
??????? GetProperty(),GetProperties():返回PropertyInfo类型,用于取得该类的属性的信息
? ? ? ?可以调用这些成员,其方式是调用Type的InvokeMember()方法,或者调用MethodInfo,PropertyInfo和其他类的Invoke()方法。?

学习可以参考:

https://docs.microsoft.com/zh-cn/dotnet/api/system.reflection.assembly?view=netcore-3.1

https://docs.microsoft.com/zh-cn/dotnet/api/system.type?view=netcore-3.1

?

?

(编辑:李大同)

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

    推荐文章
      热点阅读