public ref class Type abstract
public ref class Type abstract : System::Reflection::MemberInfo, System::Reflection::IReflect
public ref class Type abstract : System::Reflection::MemberInfo, System::Reflection::IReflect, System::Runtime::InteropServices::_Type
public abstract class Type
public abstract class Type : System.Reflection.MemberInfo, System.Reflection.IReflect
[System.Runtime.InteropServices.ClassInterface(System.Runtime.InteropServices.ClassInterfaceType.None)]
[System.Serializable]
public abstract class Type : System.Reflection.MemberInfo, System.Reflection.IReflect, System.Runtime.InteropServices._Type
[System.Runtime.InteropServices.ClassInterface(System.Runtime.InteropServices.ClassInterfaceType.None)]
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public abstract class Type : System.Reflection.MemberInfo, System.Reflection.IReflect, System.Runtime.InteropServices._Type
type Type = class
type Type = class
inherit MemberInfo
interface IReflect
[<System.Runtime.InteropServices.ClassInterface(System.Runtime.InteropServices.ClassInterfaceType.None)>]
[<System.Serializable>]
type Type = class
inherit MemberInfo
interface _Type
interface IReflect
[<System.Runtime.InteropServices.ClassInterface(System.Runtime.InteropServices.ClassInterfaceType.None)>]
[<System.Serializable>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type Type = class
inherit MemberInfo
interface _Type
interface IReflect
Public MustInherit Class Type
Public MustInherit Class Type
Inherits MemberInfo
Implements IReflect
Public MustInherit Class Type
Inherits MemberInfo
Implements _Type, IReflect
以下示例显示了 的一些代表性功能
Type
。 中的 C#
typeof
(
GetType
运算符Visual Basic) 获取
Type
表示 的对象
String
。 从此
Type
对象中,
GetMethod
方法用于获取表示采用
MethodInfo
String.Substring
起始位置和长度的重载的 。
为了标识重载签名,代码示例创建了一个临时数组,其中包含两个 对象,
Type
int
表示 (
Integer
中的Visual Basic) 。
更准确地说,数组包含对 在当前应用程序域中表示的
Type
int
实例的两个引用。 对于任何类型的 ,每个应用程序域只有一
Type
个 实例。
代码示例使用
MethodInfo
对字符串
Substring
"Hello, World!"调用 方法并显示结果。
#using <System.dll>
using namespace System;
using namespace System::Reflection;
void main()
// Get a Type object representing the System.String type.
Type^ t = String::typeid;
MethodInfo^ substr = t->GetMethod("Substring",
gcnew array<Type^> { int::typeid, int::typeid });
Object^ result =
substr->Invoke("Hello, World!", gcnew array<Object^> { 7, 5 });
Console::WriteLine("{0} returned \"{1}\".", substr, result);
/* This code example produces the following output:
System.String Substring(Int32, Int32) returned "World".
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".
Imports System.Reflection
Module Example
Sub Main()
Dim t As Type = GetType(String)
Dim substr As MethodInfo = t.GetMethod("Substring", _
New Type() { GetType(Integer), GetType(Integer) })
Dim result As Object = _
substr.Invoke("Hello, World!", New Object() { 7, 5 })
Console.WriteLine("{0} returned ""{1}"".", substr, result)
End Sub
End Module
' This code example produces the following output:
'System.String Substring(Int32, Int32) returned "World".
Type
是功能的
System.Reflection
根,是访问元数据的主要方式。 使用 的成员获取有关类型声明、类型 (的成员(例如类) 的构造函数、方法、字段、属性和事件)以及部署类的模块和程序集的信息。
Type
代码无需任何权限,即使用反射获取有关类型及其成员的信息,而不考虑其访问级别。 代码无需任何权限,即使用反射来访问公共成员,或者访问级别会使这些成员在正常编译期间可见的其他成员。 但是,为了使代码使用反射来访问通常不可访问的成员,例如私有或内部方法,或者类不继承的类型的受保护字段,代码必须具有
ReflectionPermission
。 请参阅
反射 的安全注意事项
。
Type
是允许多个实现的抽象基类。 系统将始终提供派生类
RuntimeType
。 在反射中,以"运行时"一词开头的所有类仅在系统中每个对象创建一次,并支持比较操作。
在多线程方案中,不要锁定
Type
对象以同步对数据
static
的访问。 你无法控制的其他代码也可能锁定类类型。 这可能会导致死锁。 相反,通过锁定私有对象来同步对静态数据
static
的访问。
派生类可以访问调用代码基类的受保护成员。 此外,允许访问调用代码的程序集的程序集成员。 通常,如果允许在早期绑定代码中访问 ,则还允许在后期绑定代码中访问 。
扩展其他接口的接口不继承扩展接口中定义的方法。
本节内容:
Type 对象表示哪些类型?
检索 Type 对象
比较类型对象相等性
Type 对象表示哪些类型?
此类是线程安全的;多个线程可以从此类型的实例中并发读取。 类的实例
Type
可以表示以下任何类型:
构造泛型类型和泛型类型定义
构造泛型类型、泛型类型定义和泛型方法定义的类型参数和类型参数
检索 Type 对象
Type
可通过以下方式获取与特定类型关联的 对象:
实例
Object.GetType
方法返回
Type
表示实例类型的 对象。 由于所有托管类型都派生自
Object
,
GetType
因此可以在任何类型的实例上调用 方法。
下面的示例调用 方法以确定对象数组中每个
Object.GetType
对象的运行时类型。
using namespace System;
void main()
array<Object^>^ values = { "word", true, 120, 136.34 };
for each (Object^ value in values)
Console::WriteLine("{0} - type {1}", value,
value->GetType()->Name);
// The example displays the following output:
// word - type String
// True - type Boolean
// 120 - type Int32
// 136.34 - type Double
object[] values = { "word", true, 120, 136.34, 'a' };
foreach (var value in values)
Console.WriteLine("{0} - type {1}", value,
value.GetType().Name);
// The example displays the following output:
// word - type String
// True - type Boolean
// 120 - type Int32
// 136.34 - type Double
// a - type Char
Module Example
Public Sub Main()
Dim values() As Object = { "word", True, 120, 136.34, "a"c }
For Each value In values
Console.WriteLine("{0} - type {1}", value,
value.GetType().Name)
End Sub
End Module
' The example displays the following output:
' word - type String
' True - type Boolean
' 120 - type Int32
' 136.34 - type Double
' a - type Char
静态
Type.GetType
方法返回
Type
一个 对象,该对象表示由其完全限定名称指定的类型。
、
Module.GetTypes
Module.GetType
和
Module.FindTypes
方法返回
Type
表示模块中定义的类型的 对象。 第一种方法可用于获取模块中定义的所有公共和
Type
私有类型的 对象数组。 (可以通过 或 方法或
Module
Assembly.GetModule
Assembly.GetModules
Type.Module
property.)
System.Reflection.Assembly
对象包含许多用于检索程序集中定义的类的方法,包括 、 和
Assembly.GetType
Assembly.GetTypes
Assembly.GetExportedTypes
。
FindInterfaces
方法返回类型支持的接口类型的筛选列表。
GetElementType
方法返回表示
Type
元素的 对象。
GetInterfaces
和
GetInterface
方法
Type
返回对象,这些对象表示类型支持的接口类型。
GetTypeArray
方法返回 对象的数组
Type
,这些对象表示由任意对象集指定的类型。 对象是使用 类型的数组指定的
Object
。
提供
GetTypeFromProgID
GetTypeFromCLSID
和 方法是为了实现 COM 互操作性。 它们返回
Type
一个 对象,该对象表示 由 或
ProgID
指定的类型
CLSID
。
GetTypeFromHandle
提供 方法是为了互操作性。 它返回
Type
一个 对象,该对象表示由类句柄指定的类型。
C#
typeof
运算符、C++
typeid
运算符和 Visual Basic
GetType
运算符获取
Type
类型的 对象。
方法返回表示构造泛型类型的 对象,如果其 属性返回 ,则返回开放式构造类型;否则返回封闭
MakeGenericType
Type
ContainsGenericParameters
true
构造类型。 泛型类型只有在关闭时才能实例化。
、 和 方法返回对象,这些对象分别表示指定类型的数组、指向指定类型的指针,以及 C# 中引用参数 (的类型
MakeArrayType
MakePointerType
MakeByRefType
Type
ref
ByRef
Visual Basic) 。
比较类型对象相等性
表示类型的 对象是唯一的;也就是说,当且仅在两个对象引用表示同一类型时引用
Type
Type
同一对象。 这允许使用引用
Type
相等性比较对象。 下面的示例比较表示
Type
大量整数值的对象,以确定它们是否具有相同的类型。
using namespace System;
void main()
Int64 number1 = 1635429;
Int32 number2 = 16203;
double number3 = 1639.41;
Int64 number4 = 193685412;
// Get the type of number1.
Type^ t = number1.GetType();
// Compare types of all objects with number1.
Console::WriteLine("Type of number1 and number2 are equal: {0}",
Object::ReferenceEquals(t, number2.GetType()));
Console::WriteLine("Type of number1 and number3 are equal: {0}",
Object::ReferenceEquals(t, number3.GetType()));
Console::WriteLine("Type of number1 and number4 are equal: {0}",
Object::ReferenceEquals(t, number4.GetType()));
// The example displays the following output:
// Type of number1 and number2 are equal: False
// Type of number1 and number3 are equal: False
// Type of number1 and number4 are equal: True
long number1 = 1635429;
int number2 = 16203;
double number3 = 1639.41;
long number4 = 193685412;
// Get the type of number1.
Type t = number1.GetType();
// Compare types of all objects with number1.
Console.WriteLine("Type of number1 and number2 are equal: {0}",
Object.ReferenceEquals(t, number2.GetType()));
Console.WriteLine("Type of number1 and number3 are equal: {0}",
Object.ReferenceEquals(t, number3.GetType()));
Console.WriteLine("Type of number1 and number4 are equal: {0}",
Object.ReferenceEquals(t, number4.GetType()));
// The example displays the following output:
// Type of number1 and number2 are equal: False
// Type of number1 and number3 are equal: False
// Type of number1 and number4 are equal: True
Module Example
Public Sub Main()
Dim number1 As Long = 1635429
Dim number2 As Integer = 16203
Dim number3 As Double = 1639.41
Dim number4 As Long = 193685412
' Get the type of number1.
Dim t As Type = number1.GetType()
' Compare types of all objects with number1.
Console.WriteLine("Type of number1 and number2 are equal: {0}",
Object.ReferenceEquals(t, number2.GetType()))
Console.WriteLine("Type of number1 and number3 are equal: {0}",
Object.ReferenceEquals(t, number3.GetType()))
Console.WriteLine("Type of number1 and number4 are equal: {0}",
Object.ReferenceEquals(t, number4.GetType()))
End Sub
End Module
' The example displays the following output:
' Type of number1 and number2 are equal: False
' Type of number1 and number3 are equal: False
' Type of number1 and number4 are equal: True
实施者说明
从 继承
Type
时,必须重写以下成员:
Assembly
AssemblyQualifiedName
BaseType
FullName
GetAttributeFlagsImpl()
GetConstructorImpl(BindingFlags, Binder, CallingConventions, Type[], ParameterModifier[])
GetConstructors(BindingFlags)
GetElementType()
GetEvent(String, BindingFlags)
GetEvents(BindingFlags)
GetField(String, BindingFlags)
GetFields(BindingFlags)
GetInterface(String, Boolean)
GetInterfaces()
GetMethodImpl(String, BindingFlags, Binder, CallingConventions, Type[], ParameterModifier[])
GetMethods(BindingFlags)
GetNestedType(String, BindingFlags)
GetNestedTypes(BindingFlags)
GetProperties(BindingFlags)
GetPropertyImpl(String, BindingFlags, Binder, Type, Type[], ParameterModifier[])
HasElementTypeImpl()
InvokeMember(String, BindingFlags, Binder, Object, Object[], ParameterModifier[], CultureInfo, String[])
IsArrayImpl()
IsByRefImpl()
IsCOMObjectImpl()
IsPointerImpl()
IsPrimitiveImpl()
Module
Namespace
TypeHandle
UnderlyingSystemType
GetCustomAttributes(Boolean)
GetCustomAttributes(Type, Boolean)
IsDefined(Type, Boolean)