ICorDebugClass2::GetParameterizedType 方法

获取此类的类型声明。

语法

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 对象。

要求

平台:请参阅系统要求

标头:CorDebug.idl、CorDebug.h

库:CorGuids.lib

.NET Framework 版本:自 2.0 起可用