知识大全 对.NET Framework 反射的反思[2]

Posted 类型

篇首语:生活可以五颜六色,但绝不能乱七八糟。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 对.NET Framework 反射的反思[2]相关的知识,希望对你有一定的参考价值。

对.NET Framework 反射的反思[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  另一种完全不同的情况是 解释性编程语言总是通过主进程获得执行(脚本语言通常属于此类) 由于程序的完整定义是可用的(作为输入源代码) 并跟完整的语言实现结合在一起(作为解释器本身) 因此所有支持自我分析所需的技术都到位了 这种动态语言频繁地提供全面反射功能 以及一组用于动态分析和操作程序的丰富工具

   NET Framework CLR 和它的承载语言如 C# 属于中间形态 编译器用来把源代码转换成 IL 和元数据 后者与源代码相比虽属于较低级别或者较低 逻辑性 但仍然保留了很多抽象结构和类型信息 一旦 CLR 启动和承载了此程序 基类库 (BCL) 的 System Reflection 库便可以使用此信息 并返回关于对象类型 类型成员 成员签名等的信息 此外 它也可以支持调用 包括后期绑定调用

   NET 中的反射

  要在用 NET Framework 编程时利用反射 您可以使用 System Reflection 命名空间 此命名空间提供封装了很多运行时概念的类 例如程序集 模块 类型 方法 构造函数 字段和属性 图 中的表显示 System Reflection 中的类如何与概念上运行时的对应项对应起来

  尽管很重要 不过 System Reflection Assembly 和 System Reflection Module 主要用于定位新代码并将其加载到运行时 本专栏中 我暂不讨论这些部分 并且假定所有相关代码都已经加载

  要检查和操作已加载代码 典型模式主要是 System Type 通常 您从获得一个所关注运行时类别的 System Type 实例开始(通过 Object GetType) 接着您可以使用 System Type 的各种方法 在 System Reflection 中探索类型的定义并获得其它类的实例 例如 如果您对某特定方法感兴趣 并希望获得此方法的一个 System Reflection MethodInfo 实例(可能通过 Type GetMethod) 同样 如果您对某字段感兴趣 并希望获得此字段的一个 System Reflection FieldInfo 实例(可能通过 Type GetField)

  一旦获得所有必要的反射实例对象 即可根据需要遵循检查或操作的步骤继续 检查时 您在反射类中使用各种描述性属性 获得您需要的信息(这是通用类型吗?这是实例方法吗?) 操作时 您可以动态地调用并执行方法 通过调用构造函数创建新对象 等等

  检查类型和成员

  让我们跳转到一些代码中 探索如何运用基本反射进行检查 我将集中讨论类型分析 从一个对象开始 我将检索它的类型 而后考察几个有意思的成员(请参见图 )

  首先需要注意的是 在类定义中 乍看起来说明方法的篇幅比我预期的要多很多 这些额外的方法是从哪里来的呢?任何精通 NET Framework 对象层次结构的人 都会识别从通用基类 Object 自身继承的这些方法 (事实上 我首先使用了 Object GetType 检索其类型 )此外 您可以看到属性的 getter 函数 现在 如果您只需要 MyClass 自身显式定义的函数 该怎么办呢?换句话说 您如何隐藏继承的函数?或者您可能只需要显式定义的实例函数?

  随便在线看看 MSDN 就会发现大家都愿意使用 GetMethods 第二个重载方法 它接受 BindingFlags 参数 通过结合来自 BindingFlags 枚举中不同的值 您可以让函数仅返回所需的方法子集 替换 GetMethods 调用 代之以

  GetMethods(BindingFlags Instance | BindingFlags DeclaredOnly |BindingFlags Public)

  结果是 您得到以下输出(注意这里不存在静态帮助器函数和继承自 System Object 的函数)

  Reflection Demo Example

  Type Name: MyClass

  Method Name: MyMethod

  Method Name: MyMethod

  Method Name: get_MyProperty

  Property Name: MyProperty

  如果您事先知道类型名称(完全限定)和成员 又该如何?您如何完成从枚举类型向检索类型的转换?有了前两个示例中的代码 您已经有了能够实现基元类浏览器的基本组件 通过名称您可以找到一个运行时实体 然后枚举其各种相关属性

cha138/Article/program/net/201311/15776

相关参考

知识大全 对.NET Framework 反射的反思[3]

对.NETFramework反射的反思[3]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  动态

知识大全 对.NET Framework 反射的反思[4]

对.NETFramework反射的反思[4]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  如果

知识大全 .Net Framework 2.0范型的反射使用[2]

.NetFramework2.0范型的反射使用[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

知识大全 .Net Framework 2.0范型的反射使用

.NetFramework2.0范型的反射使用  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  在

知识大全 .Net Framework 2.0范型的反射使用[1]

.NetFramework2.0范型的反射使用[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

知识大全 .Net Framework 2.0范型的反射使用[3]

.NetFramework2.0范型的反射使用[3]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

知识大全 剖析.NET Framework框架[2]

剖析.NETFramework框架[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! .NETF

知识大全 .Net Framework 2.0中的事务处理

.NetFramework2.0中的事务处理  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  事务

知识大全 ADO.NET Entity Framework 试水——并发[2]

ADO.NETEntityFramework试水——并发[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来

知识大全 使用.NET Framework中新的日期时间类型[2]

使用.NETFramework中新的日期时间类型[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧