- 1、本文档共46页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第十二章 反射 本课内容 了解反射的基本概念 了解特性的基本概念 通过反射读取类、模块、程序集 通过反射读取作用于类、模块、程序集上的特性 使用反射动态创建类,并使用类中的方法 反射的概念 反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问、检测和修改它本身状态或行为的一种能力。 这一概念的提出很快引发了计算机科学领域关于应用反射性的研究。它首先被程序语言的设计领域所采用,并在Lisp和面向对象方面取得了成绩。 早期的LEAD/LEAD++?、OpenC++?、MetaXa和OpenJava等就是基于反射机制的语言。 反射的概念 运用强大的反射技术,可以在程序的运行过程中读取和处理程序集。它的具体功能如下: (1)在程序运行中枚举程序集中类型的成员 (2)在程序运行中查找数据类型的各种信息 (3)在程序运行中查找程序集的各种信息 (4)在程序运行中查找应用于类型、模块和程序集的定制特性 (5)在程序运行中实例化新对象 (6)在程序运行中执行对象的方法等 (7)在程序运行中创建和编译新程序集 关于特性 特性的概念 特性的概念 DllImport STAThread与MTAThread 插入的知识 Obsolete 其它特性 预定义特性的总结 开发自定义的特性 开发自定义的特性 定义/控制自定义特性的使用 开发自定义的特性 AttributeTargets AllowMultiple Inherited Inherited 定位参数与命名参数 属性标识 特性示例 反射 System.Type类 Type的属性 Type的属性 Type的属性 Type的方法 Type的方法 Type的方法 TypeView示例 Assembly类 查找在程序集中定义的类型 查找定制特性 LookUpWhatsNew示例 查找定制特性 一个遗留问题 动态创建对象及调用 1.使用无参数构造函数创建对象 2.使用有参数构造函数创建对象 3、动态调用方法 总结 本课介绍了系统预定义特性(Attribute)。 还介绍了特性作为说明性的内容,可以和程序绑定在一起,通过反射来调用它。 另外我们还知道反射捕获的内容是程序集级别的,在程序集下可以捕捉所有的类,并可以查找作用在这些类上的定制特性,了解这些类的说明文档,为下一步的处理做好准备。 反射的技术应用是比较流行的话题,也是一个技术趋势。 实践 实践:利用定制特性将以前做的+、-、×、\运算器做一个版本说明,然后利用反射去读取它们。 GetProperty(), GetProperties() PropertyInfo GetMethod(), GetMethods() MethodInfo GetMember(), GetMembers() MemberInfo GetInterface(), GetInterfaces() InterfaceInfo GetField(), GetFields() FieldInfo GetEvent(), GetEvents() EventInfo GetConstructor(), GetConstructors() ConstructorInfo 方法 (名称为复数形式的方法返回一个数组) 返回的对象类型 (1)GetMember() 和 GetMembers()方法返回数据类型的一个或所有成员的信息,这些成员可以是构造函数、属性和方法等。 (2)如果操作和调用这些成员,其方式是调用Type的InvokeMember()方法,或者调用MethodInfo, PropertyInfo和其他类的Invoke()方法。 关于调用请参阅后面的部分。 见《例子源代码》下的WindowsApplicationTypeView (1)Assembly类在System.Reflection命名空间中定义,它允许用户访问给定程序集的元数据,它也包含可以加载和执行程序集(假定该程序集是可执行的) 的方法。 (2)与Type类一样,Assembly类包含非常多的方法和属性,这里不可能一一论述。 (3)使用静态成员Assembly.Load() 或 Assembly.LoadFrom()获取程序集实例。 Assembly assembly1 = Assembly.Load(SomeAssembly); Assembly assembly2 = Assembly.LoadFrom (@C:\My Projects\Software\SomeOtherAssembly); Assembly类的一个特性是可以获得在相应程序集中定义的所有类型的信息,调用Assembly.GetTypes()方法,就可以返回一个包含所有
您可能关注的文档
- 财务报表分析期末作业àVotreSanté在葡萄酒行业的产品成本核算和决策分析SHUFEMBA李傲2012212189.docx
- 财务报表分析综合练习题一.doc
- 财务报账制度完整版.doc
- 财务报销制度完整版及报销流程.doc
- 财务报销违规问题专项治理自查报告两篇.doc
- 财务期中报告个案讨论.doc
- 财务状况说明方案范例.doc
- 财务管理学习心得体会学年总结.doc
- 财务管理实验实习报告.doc
- 财务经理岗位职责说明方案.doc
- 第18讲 第17课 西晋的短暂统一和北方各族的内迁.docx
- 第15讲 第14课 沟通中外文明的“丝绸之路”.docx
- 第13课时 中东 欧洲西部.doc
- 第17讲 第16 课三国鼎立.docx
- 第17讲 第16课 三国鼎立 带解析.docx
- 2024_2025年新教材高中历史课时检测9近代西方的法律与教化含解析新人教版选择性必修1.doc
- 2024_2025学年高二数学下学期期末备考试卷文含解析.docx
- 山西版2024高考政治一轮复习第二单元生产劳动与经营第5课时企业与劳动者教案.docx
- 第16讲 第15课 两汉的科技和文化 带解析.docx
- 第13课 宋元时期的科技与中外交通.docx
文档评论(0)