System.Type 类

方法描述

表示类型声明:类类型、接口类型、数组类型、值类型、枚举类型、类型参数、泛型类型定义,以及开放或封闭构造的泛型类型。

语法定义(C# System.Type 类 的用法)

[SerializableAttribute]
[ClassInterfaceAttribute(ClassInterfaceType.None)]
[ComVisibleAttribute(true)]
public abstract class Type : MemberInfo, 
	_Type, IReflect

构造函数

构造函数名称 构造函数描述
Type 初始化 Type 类的新实例。

成员/方法

方法名称 方法描述
Equals(Object) 确定当前 Type 的基础系统类型是否与指定 Object 的基础系统类型相同。 (重写 MemberInfo.Equals(Object)。)
Equals(Type) 确定当前 Type 的基础系统类型是否与指定 Type 的基础系统类型相同。
Finalize 允许对象在“垃圾回收”回收之前尝试释放资源并执行其他清理操作。 (继承自 Object。)
FindInterfaces 返回表示接口(由当前 Type 所实现或继承)的筛选列表的 Type 对象数组。
FindMembers 返回指定成员类型的 MemberInfo 对象的筛选数组。
GetArrayRank 获取 Array 中的维数。
GetAttributeFlagsImpl 当在派生类中重写时,实现 Attributes 属性,并获取指示与 Type 关联的特性的位屏蔽。
GetConstructor(Type[]) 搜索其参数与指定数组中的类型匹配的公共实例构造函数。
GetConstructor(BindingFlags, Binder, Type[], ParameterModifier[]) 使用指定绑定约束搜索其参数与指定参数类型和修饰符匹配的构造函数。
GetConstructor(BindingFlags, Binder, CallingConventions, Type[], ParameterModifier[]) 用指定绑定约束和指定调用约定,搜索其参数与指定参数类型及修饰符匹配的构造函数。
GetConstructorImpl 当在派生类中重写时,使用指定的绑定约束和指定的调用约定搜索其参数与指定的参数类型和修饰符匹配的构造函数。
GetConstructors() 返回为当前 Type 定义的所有公共构造函数。
GetConstructors(BindingFlags) 当在派生类中重写时,使用指定 BindingFlags 搜索为当前 Type 定义的构造函数。
GetCustomAttributes(Boolean) 在派生类中重写时,返回应用于此成员的所有自定义特性的数组。 (继承自 MemberInfo。)
GetCustomAttributes(Type, Boolean) 在派生类中重写时,返回应用于此成员并由 Type 标识的自定义特性的数组。 (继承自 MemberInfo。)
GetCustomAttributesData 返回一个 CustomAttributeData 对象列表,这些对象表示有关已应用于目标成员的特性的数据。 (继承自 MemberInfo。)
GetDefaultMembers 搜索为设置了 DefaultMemberAttribute 的当前 Type 定义的成员。
GetElementType 当在派生类中重写时,返回当前数组、指针或引用类型包含的或引用的对象的 Type。
GetEnumName 返回当前枚举类型中具有指定值的常数的名称。
GetEnumNames 返回当前枚举类型中各个成员的名称。
GetEnumUnderlyingType 返回当前枚举类型的基础类型。
GetEnumValues 返回当前枚举类型中各个常数的值组成的数组。
GetEvent(String) 返回表示指定的公共事件的 EventInfo 对象。
GetEvent(String, BindingFlags) 当在派生类中重写时,使用指定绑定约束,返回表示指定事件的 EventInfo 对象。
GetEvents() 返回由当前 Type 声明或继承的所有公共事件。
GetEvents(BindingFlags) 当在派生类中重写时,使用指定绑定约束,搜索由当前 Type 声明或继承的事件。
GetField(String) 搜索具有指定名称的公共字段。
GetField(String, BindingFlags) 使用指定绑定约束搜索指定字段。
GetFields() 返回当前 Type 的所有公共字段。
GetFields(BindingFlags) 当在派生类中重写时,使用指定绑定约束,搜索为当前 Type 定义的字段。
GetGenericArguments 返回表示泛型类型的类型实参或泛型类型定义的类型形参的 Type 对象的数组。
GetGenericParameterConstraints 返回表示当前泛型类型参数约束的 Type 对象的数组。
GetGenericTypeDefinition 返回一个表示可用于构造当前泛型类型的泛型类型定义的 Type 对象。
GetHashCode 返回此实例的哈希代码。 (重写 MemberInfo.GetHashCode()。)
GetInterface(String) 搜索具有指定名称的接口。
GetInterface(String, Boolean) 当在派生类中重写时,搜索指定的接口,指定是否对接口名称执行不区分大小写的搜索。
GetInterfaceMap 返回指定接口类型的接口映射。
GetInterfaces 当在派生类中重写时,获取由当前 Type 实现或继承的所有接口。
GetMember(String) 搜索具有指定名称的公共成员。
GetMember(String, BindingFlags) 使用指定绑定约束搜索指定成员。
GetMember(String, MemberTypes, BindingFlags) 使用指定绑定约束搜索指定成员类型的指定成员。
GetMembers() 返回当前 Type 的所有公共成员。
GetMembers(BindingFlags) 当在派生类中重写时,使用指定绑定约束,搜索为当前 Type 定义的成员。
GetMethod(String) 搜索具有指定名称的公共方法。
GetMethod(String, BindingFlags) 使用指定绑定约束搜索指定方法。
GetMethod(String, Type[]) 搜索其参数与指定参数类型匹配的指定公共方法。
GetMethod(String, Type[], ParameterModifier[]) 搜索其参数与指定参数类型及修饰符匹配的指定公共方法。
GetMethod(String, BindingFlags, Binder, Type[], ParameterModifier[]) 使用指定绑定约束,搜索其参数与指定参数类型及修饰符匹配的指定方法。
GetMethod(String, BindingFlags, Binder, CallingConventions, Type[], ParameterModifier[]) 用指定的绑定约束和指定的调用约定,搜索参数与指定的参数类型及修饰符相匹配的指定方法。
GetMethodImpl 当在派生类中重写时,使用指定的绑定约束和指定的调用约定搜索其参数与指定的参数类型和修饰符匹配的指定方法。
GetMethods() 返回当前 Type 的所有公共方法。
GetMethods(BindingFlags) 当在派生类中重写时,使用指定绑定约束,搜索为当前 Type 定义的方法。
GetNestedType(String) 搜索具有指定名称的公共嵌套类型。
GetNestedType(String, BindingFlags) 当在派生类中重写时,使用指定绑定约束搜索指定嵌套类型。
GetNestedTypes() 返回嵌套在当前的 Type 中的公共类型。
GetNestedTypes(BindingFlags) 当在派生类中重写时,使用指定绑定约束搜索嵌套在当前 Type 中的类型。
GetProperties() 返回当前 Type 的所有公共属性。
GetProperties(BindingFlags) 当在派生类中重写时,使用指定绑定约束,搜索当前 Type 的如果属性至少有一个为公共的访问器,则该属性被视为对于反射是公共的。
GetProperty(String) 搜索具有指定名称的公共属性。
GetProperty(String, BindingFlags) 使用指定的绑定约束搜索指定属性。
GetProperty(String, Type) 搜索具有指定名称和返回类型的公共属性。
GetProperty(String, Type[]) 搜索其参数与指定参数类型匹配的指定公共属性。
GetProperty(String, Type, Type[]) 搜索其参数与指定参数类型匹配的指定公共属性。
GetProperty(String, Type, Type[], ParameterModifier[]) 搜索其参数与指定参数类型及修饰符匹配的指定公共属性。
GetProperty(String, BindingFlags, Binder, Type, Type[], ParameterModifier[]) 使用指定的绑定约束,搜索参数与指定的参数类型及修饰符匹配的指定属性。
GetPropertyImpl 当在派生类中重写时,使用指定的绑定约束搜索其参数与指定的参数类型和修饰符匹配的指定属性。
GetType() 获取当前 Type。 在 XNA Framework3.0GetType()。 在 GetType()。
GetType(String) 获取具有指定名称的 Type,执行区分大小写的搜索。
GetType(String, Boolean) 获取具有指定名称的 Type,同时执行大小写敏感的搜索,并指定是否在没有找到该类型时引发异常。
GetType(String, Boolean, Boolean) 获取具有指定名称的 Type,指定是否执行区分大小写的搜索,以及在找不到类型时是否引发异常。
GetType(String, Func, Func) 获取具有指定名称的类型,(可选)提供自定义方法以解析程序集和该类型。
GetType(String, Func, Func, Boolean) 获取具有指定名称的类型,指定在找不到该类型时是否引发异常,(可选)提供自定义方法以解析程序集和该类型。
GetType(String, Func, Func, Boolean, Boolean) 获取具有指定名称的类型,指定是否执行区分大小写的搜索,在找不到类型时是否引发异常,(可选)提供自定义方法以解析程序集和该类型。
GetTypeArray 获取指定数组中对象的类型。
GetTypeCode 获取指定 Type 的基础类型代码。
GetTypeCodeImpl 返回指定的 Type 的基础类型代码。
GetTypeFromCLSID(Guid) 获取与指定类标识符 (CLSID) 关联的类型。
GetTypeFromCLSID(Guid, Boolean) 获取与指定类标识符 (CLSID) 关联的类型,指定在加载该类型时如果发生错误是否引发异常。
GetTypeFromCLSID(Guid, String) 从指定服务器获取与指定类标识符 (CLSID) 关联的类型。
GetTypeFromCLSID(Guid, String, Boolean) 从指定服务器获取与指定类标识符 (CLSID) 关联的类型,指定在加载该类型时如果发生错误是否引发异常。
GetTypeFromHandle 获取由指定类型句柄引用的类型。
GetTypeFromProgID(String) 获取与指定程序标识符 (ProgID) 关联的类型,如果在加载 Type 时遇到错误,则返回空值。
GetTypeFromProgID(String, Boolean) 获取与指定程序标识符 (ProgID) 关联的类型,指定如果在加载该类型时发生错误是否引发异常。
GetTypeFromProgID(String, String) 从指定服务器获取与指定程序标识符 (progID) 关联的类型,如果在加载该类型时遇到错误则返回空值。
GetTypeFromProgID(String, String, Boolean) 从指定服务器获取与指定程序标识符 (progID) 关联的类型,指定如果在加载该类型时发生错误是否引发异常。
GetTypeHandle 获取指定对象的 Type 的句柄。
HasElementTypeImpl 当在派生类中重写时,实现 HasElementType 属性,确定当前 Type 是否包含另一类型或对其引用;即,当前 Type 是否是数组、指针或由引用传递。
InvokeMember(String, BindingFlags, Binder, Object, Object[]) 使用指定的绑定约束并匹配指定的参数列表,调用指定成员。
InvokeMember(String, BindingFlags, Binder, Object, Object[], CultureInfo) 使用指定的绑定约束和匹配的指定参数列表及区域性来调用指定成员。
InvokeMember(String, BindingFlags, Binder, Object, Object[], ParameterModifier[], CultureInfo, String[]) 当在派生类中重写时,使用指定的绑定约束并匹配指定的参数列表、修饰符和区域性,调用指定成员。
IsArrayImpl 当在派生类中重写时,实现 IsArray 属性并确定 Type 是否为数组。
IsAssignableFrom 确定当前的 Type 的实例是否可以从指定 Type 的实例分配。
IsByRefImpl 当在派生类中重写时,实现 IsByRef 属性并确定 Type 是否由引用传递。
IsCOMObjectImpl 当在派生类中重写时,实现 IsCOMObject 属性并确定 Type 是否为 COM 对象。
IsContextfulImpl 实现 IsContextful 属性并确定 Type 在上下文中是否可以被承载。
IsDefined 在派生类中重写时,指示是否将指定类型或其派生类型的一个或多个特性应用于此成员。 (继承自 MemberInfo。)
IsEnumDefined 返回一个值,该值指示当前的枚举类型中是否存在指定的值。
IsEquivalentTo 确定两个 COM 类型是否具有相同的标识,以及是否符合类型等效的条件。
IsInstanceOfType 确定指定的对象是否是当前 Type 的实例。
IsMarshalByRefImpl 实现 IsMarshalByRef 属性并确定 Type 是否按引用来进行封送。
IsPointerImpl 当在派生类中重写时,实现 IsPointer 属性并确定 Type 是否为指针。
IsPrimitiveImpl 当在派生类中重写时,实现 IsPrimitive 属性并确定 Type 是否为基元类型之一。
IsSubclassOf 确定当前 Type 表示的类是否是从指定的 Type 表示的类派生的。
IsValueTypeImpl 实现 IsValueType 属性并确定 Type 是否是值类型;即,它不是类或接口。
MakeArrayType() 返回一个表示当前类型的一维数组(下限为零)的 Type 对象。
MakeArrayType(Int32) 返回表示当前类型的指定维数的数组的 Type 对象。
MakeByRefType 返回表示作为 ref 参数(在 Visual Basic 中为 ByRef 参数)传递时的当前类型的 Type 对象。
MakeGenericType 替代由当前泛型类型定义的类型参数组成的类型数组的元素,并返回表示结果构造类型的 Type 对象。
MakePointerType 返回表示指向当前类型的指针的 Type 对象。
MemberwiseClone 创建当前 Object 的浅表副本。 (继承自 Object。)
ReflectionOnlyGetType 获取具有指定名称的 Type,指定是否执行区分大小写的搜索,以及在找不到类型时是否引发异常。 该类型只为反射加载,而不为执行加载。
ToString 返回表示当前 Type 的名称的 String。 (重写 Object.ToString()。)

提示和注释

Type 为 System.Reflection 功能的根,也是访问元数据的主要方式。 使用 Type 的成员获取关于类型声明的信息,如构造函数、方法、字段、属性和类的事件,以及在其中部署该类的模块和程序集。

C# typeof 运算符(在 Visual Basic 中为 GetType 运算符,在 Visual C++ 中为 typeid 运算符)返回一个 Type 对象。

表示某个类型是唯一的 Type 对象;即,两个 Type 对象引用当且仅当它们表示相同的类型时,才引用相同的对象。 这允许使用参考等式来比较 Type 对象。

代码无需权限即可使用反射获取有关类型及其成员的信息(无论其访问级别如何)。 代码无需权限即可使用反射访问公共成员,或其访问级别使其在常规编译过程中可见的其他成员。 但是,为了您的代码能够使用反射来访问通常不可访问的成员(如专用方法或内部方法)或您的类不继承的类型的受保护字段,您的代码必须具有 ReflectionPermission。 请参见反射的安全注意事项。

Type 是允许多个实现的抽象基类。 系统将总是提供派生类 RuntimeType。 在反射中,所有以 Runtime 一词开头的类对系统中的每个对象都只能创建一次,并且这些类支持比较操作。

注意

在多线程方案中,不要锁定 Type 对象以同步对 static 数据的访问。 其他不受您控制的代码可能也会锁定您的类类型。 这可能会导致死锁。 应转而通过锁定私有 static 对象来同步对静态数据的访问。

这个类是线程安全的;多个线程可以同时从此类型的一个实例读取数据。 Type 的实例可表示以下任何类型:

值类型

数组

接口

指针

枚举

构造泛型类型和泛型类型定义

构造泛型类型、泛型类型定义和泛型方法定义的类型实参和类型形参

可以通过下列方式获得对与某个类型关联的 Type 对象的引用:

Object.GetType 方法返回表示实例类型的 Type 对象。

静态 GetType 方法返回 Type 对象,该对象表示由其完全限定名指定的类型。

Module.GetTypes 、Module.GetType 和 Module.FindTypes 方法返回 Type 对象,这些对象表示在某个模块中定义的类型。 第一个方法可用于获得模块中定义的所有公共类型和私有类型的 Type 对象的数组。 (可通过 Assembly.GetModule 方法或 Assembly.GetModules 方法,或通过 Type.Module 属性来获得 Module 的实例。)

System.Reflection.Assembly 对象包含大量方法来检索程序集中定义的类,包括 [O:System.Reflection.Assembly.GetType]、Assembly.GetTypes 和 Assembly.GetExportedTypes。

FindInterfaces 方法返回某个类型所支持的接口类型的筛选后的列表。

GetElementType 方法返回表示元素的 Type 对象。

GetInterfaces 和 GetInterface 方法返回表示某个类型所支持的接口类型的 Type 对象。

GetTypeArray 方法返回表示任意一组对象所指定的类型的 Type 对象数组。 这些对象用 Object 类型的数组指定。

GetTypeFromProgID 和 GetTypeFromCLSID 方法是为 COM 互操作而提供的。 这些方法返回表示 ProgID 或 CLSID 所指定的类型的 Type 对象。

GetTypeFromHandle 方法是为交互操作而提供的。 此方法返回表示类句柄所指定的类型的 Type 对象。

C# typeof 运算符、C++ typeid 运算符和 Visual Basic GetType 运算符获得某个类型的 Type 对象。

MakeGenericType 方法返回 Type 对象,该对象表示构造泛型类型,如果该对象的 ContainsGenericParameters 属性返回 true,则该类型为开放构造类型,否则为封闭构造类型。 只能实例化封闭的泛型类型。

MakeArrayType 、MakePointerType 和 MakeByRefType 方法返回 Type 对象,这些对象分别表示指定类型的数组、指向指定类型的指针以及引用参数的类型(在 C# 中为 ref,在 Visual Basic 中为 ByRef)。

注意

派生类可以访问调用代码的基类的受保护成员。 而且还可以访问调用代码程序集的程序集成员。 一般来说,如果允许访问早期绑定代码,那么也就允许访问后期绑定代码。

注意

扩展其他接口的接口不继承被扩展的接口中定义的方法。

对继承者的说明

当从 Type 继承时,必须重写以下成员:GUID、InvokeMember(String, BindingFlags, Binder, Object, Object[], ParameterModifier[], CultureInfo, String[])、Module、Assembly、TypeHandle、FullName、Namespace、AssemblyQualifiedName、BaseType、GetConstructorImpl、GetConstructors(BindingFlags)、GetMethodImpl、GetMethods(BindingFlags)、GetField(String, BindingFlags)、GetFields(BindingFlags)、GetInterface(String, Boolean)、GetInterfaces()、GetEvent(String, BindingFlags)、GetEvents(BindingFlags)、GetPropertyImpl、GetProperties(BindingFlags)、GetNestedType(String, BindingFlags)、GetNestedTypes(BindingFlags)、GetAttributeFlagsImpl、IsArrayImpl、IsByRefImpl、IsPointerImpl、IsPrimitiveImpl、IsCOMObjectImpl、GetElementType()、HasElementTypeImpl、UnderlyingSystemType、MemberInfo.Name、MemberInfo.IsDefined、MemberInfo.GetCustomAttributes(Boolean) 和 GetCustomAttributes。

System.Type 类例子

该代码示例使用 MethodInfo 来对字符串“Hello, World!”调用 Substring 方法,并显示相应的结果。

using System;
using System.Reflection;

class Example
{
    static void Main()
    {
        Type t = typeof(String);

        MethodInfo substr = t.GetMethod("Substring", 
            new Type[] { typeof(int), typeof(int) });

        Object result = 
            substr.Invoke("Hello, World!", new Object[] { 7, 5 });
        Console.WriteLine("{0} returned \"{1}\".", substr, result);
    }
}

/* This code example produces the following output:

System.String Substring(Int32, Int32) returned "World".
 */

继承层次结构

System.Object

System.Reflection.MemberInfo

System.Type

System.Reflection.Emit.EnumBuilder

System.Reflection.Emit.GenericTypeParameterBuilder

System.Reflection.Emit.TypeBuilder

System.Reflection.TypeDelegator

命名空间

namespace: System

程序集: mscorlib(在 mscorlib.dll 中)

线程安全

此类型是线程安全的。

版本信息

.NET Framework 受以下版本支持:4、3.5、3.0、2.0、1.1、1.0 .NET Framework Client Profile 受以下版本支持:4、3.5 SP1 受以下版本支持:

适用平台

Windows 7, Windows Vista SP1 或更高版本, Windows XP SP3, Windows XP SP2 x64 Edition, Windows Server 2008(不支持服务器核心), Windows Server 2008 R2(支持 SP1 或更高版本的服务器核心), Windows Server 2003 SP2 .NET Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表,请参见.NET Framework 系统要求。