反射 笔记

反射中的运行时类型

   反射提供类(例如Type和MethodInfo)来表示类型、成员、参数和其他代码实体。但是,在你使用反射时,你并不直接使用这些类,这些类中的大多数是抽象的(MustInherit).你使用的是公共语言运行时提供的类型。

   例如,使用C#的typeof运行符(VB中GetType)获取Type对象时,该对象实际上是RuntimeType。RuntimeType是派生自Type,并提供所有抽象的实现。

这些运行时类是internal(VB中Friend)。它们的文档与它们的基类文档并没有分开,因为他们的行为是有基类文档描述的。

查看类型信息

  System.Type类对于反射起着核心的作用。当反射请求加载类型时,公共语言进行时将为它创建一个Type。你可以使用Type对象的方法、字段、属性和嵌套类来查找有关该类型的所有信息。

  使用Assembly.GetType或者Assmbly.GetTypes从尚未加载的程序集中获取Type对象,并传入所需类型的名称。

  使用Type.GetType可从已加载的程序集中获取Type对象。

  使用Module.GetType和Module.GetTypes可获取模块Type对象。

在获取了一个Type后,你可以有采用很多方法来发现与该类型的成员有关的信息。例如,通过调用Type.GetMembers方法(该方法将获取对当前类型的每个成员进行描述的一组MemberInfo对象),你可以找到有关该类型所有成员的信息。

你也可以在Type类上使用方法,以检索有关按名称指定一个或多个构造函数、方法、事件或者属性的信息。例如,Type.GetConstructor封装当前类的特定构造函数。

如果具有Type,则可以使用Type.Module属性来获取一个封装该类型所在模块的对象。使用Module.Assembly属性可查找封装模块所在程序集的对象。使用Type.Assembly属性可直接获取封装该类型的程序集。

反射类型和泛型类型

泛型介绍

泛型将类型参数的概念引入.net framework,类型参数使得设计如下类和方法成为可能:

这些类和方法将一个或多个类型的指定推迟到推迟到客户端代码声明并实例化该类或方法的时候。

例如通过使用泛型类型参数T,您可以编写其他客户端代码能够使用的单个类,而不致引入运行时强制转换或者装箱操作的成本或风险。

使用泛型类型可以最大限度地重用代码、保护类型的安全以及提高性能。

泛型最常见的用途是创建集合类。

.net framework类库在System.Collections.Generic命名空间中包含几个新的泛型集合类。应尽可能地使用这些类来代替普通类,如System.Collections命名空间中的ArrayList

你可以创建自己泛型接口、泛型类、泛型方法、泛型事件和泛型委托

可以对泛型类进行约束以访问特定数据类型的方法

关于泛型数据类型中使用的类型的信息可在运行时通过反射获取。

 

 

 

 

原文地址:https://www.cnblogs.com/RealAlex/p/2920468.html