ICorDebugClass2::GetParameterizedType 方法

更新:2007 年 11 月

获取此类的类型声明。

HRESULT GetParameterizedType (
    [in] CorElementType                      elementType,
    [in] ULONG32                             nTypeArgs,
    [in, size_is(nTypeArgs)] ICorDebugType  *ppTypeArgs[],
    [out] ICorDebugType                    **ppType
);

参数

  • elementType
    [in] 一个指定此类的元素类型的 CorElementType 枚举值:如果此 ICorDebugClass2 表示一个值类型,则将该值设置为 ELEMENT_TYPE_VALUETYPE。如果此 ICorDebugClass2 表示复杂类型,则将该值设置为 ELEMENT_TYPE_CLASS。

  • nTypeArgs
    [in] 类型参数的数量(如果类型为泛型)。类型参数(如果有)的数量必须与类所需的数量相匹配。

  • ppTypeArgs
    [in] 一个由指针组成的数组,其中每个指针都指向一个表示类型参数的 ICorDebugType 对象。如果类为非泛型,则该值为 Null。

  • ppType
    [out] 一个指向 ICorDebugType 对象地址的指针,该对象表示类型声明。此对象等效于托管代码中的 Type 对象。

备注

如果类为非泛型(即,如果类不具有类型参数),则 GetParameterizedType 只获取与该类相对应的运行时类型对象。elementType 参数应设置为该类的正确元素类型:如果该类为值类型,则为 ELEMENT_TYPE_VALUETYPE;否则为 ELEMENT_TYPE_CLASS。

如果该类接受类型参数(例如 ArrayList<T>),则可以使用 GetParameterizedType 构造实例化类型(例如 ArrayList<int>)的类型对象。

背景信息

在 .NET Framework 1.0 和 1.1 版中,元数据中的每个类型都可以直接映射到正在运行的进程中的类型。因此,元数据类型和运行时类型在正在运行的进程中只有一种表示形式。但是,元数据中的一个泛型类型可以映射到正在运行进程中该类型的多个不同实例化。例如,元数据类型 SortedList<K,V> 可以映射到 SortedList<String, EmployeeRecord>、SortedList<Int32, String>、SortedList<String,Array<Int32>> 等。因此,需要一种处理类型实例化的方法。

.NET Framework 2.0 版引入了 ICorDebugType 接口。对于泛型类型,ICorDebugClassICorDebugClass2 对象表示未实例化的类型 (SortedList<K,V>),ICorDebugType 对象表示各种实例化的类型。如果给出一个 ICorDebugClassICorDebugClass2 对象,则可以通过调用 ICorDebugClass2::GetParameterizedType 方法为任何实例化创建一个 ICorDebugType 对象。还可以为简单类型(例如 Int32)或非泛型类型创建一个 ICorDebugType 对象。

引入用于表示类型运行时概念的 ICorDebugType 对象在整个 API 中具有连锁反应。以前采用 ICorDebugClassICorDebugClass2 对象或者甚至是 CorElementType 值的函数现在普遍采用 ICorDebugType 对象。

要求

**平台:**请参见 .NET Framework 系统要求

**头文件:**CorDebug.idl

**库:**CorGuids.lib

**.NET Framework 版本:**3.5 SP1、3.5、3.0 SP1、3.0、2.0 SP1、2.0

请参见

参考

ICorDebugClass2