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
接口。 对于泛型类型,ICorDebugClass
或 ICorDebugClass2
对象表示未实例化类型 (SortedList<K,V>
),ICorDebugType
对象表示各种实例化类型。 给定一个 ICorDebugClass
或 ICorDebugClass2
对象,可以通过调用 ICorDebugClass2::GetParameterizedType
方法为任何实例化创建 ICorDebugType
对象。 还可以为简单类型(例如 Int32)或非泛型类型创建 ICorDebugType
对象。
引入 ICorDebugType
对象来表示类型的运行时概念会在整个 API 中产生连锁反应。 以前采用 ICorDebugClass
或 ICorDebugClass2
对象甚至 CorElementType
值的函数被泛化为采用 ICorDebugType
对象。
要求
平台:请参阅系统要求。
标头:CorDebug.idl、CorDebug.h
库:CorGuids.lib
.NET Framework 版本:自 2.0 起可用
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈