public unsafe static void SetInstantiation(RuntimeTypeHandle typeHandle, RuntimeTypeHandle genericTypeDefinitionHandle, RuntimeTypeHandle[] genericTypeArgumentHandles) { EETypePtr eeTypeDefinition = CreateEETypePtr(genericTypeDefinitionHandle); EETypePtr eeType = CreateEETypePtr(typeHandle); int arity = genericTypeArgumentHandles.Length; EETypePtr *eeTypeArguments = stackalloc EETypePtr[genericTypeArgumentHandles.Length]; for (int i = 0; i < arity; i++) { eeTypeArguments[i] = CreateEETypePtr(genericTypeArgumentHandles[i]); } if (!RuntimeImports.RhSetGenericInstantiation(eeType, eeTypeDefinition, arity, eeTypeArguments)) { throw new OutOfMemoryException(); } }
internal static unsafe extern bool RhSetGenericInstantiation(EETypePtr pEEType, EETypePtr pEETypeDef, int arity, EETypePtr *pInstantiation);
private static IntPtr RhResolveDispatchOnType(EETypePtr instanceType, EETypePtr interfaceType, ushort slot, EETypePtr *pGenericContext) { // Type of object we're dispatching on. MethodTable *pInstanceType = instanceType.ToPointer(); // Type of interface MethodTable *pInterfaceType = interfaceType.ToPointer(); return(DispatchResolve.FindInterfaceMethodImplementationTarget(pInstanceType, pInterfaceType, slot, (MethodTable **)pGenericContext)); }
internal static extern unsafe EETypePtr RhGetGenericInstantiation(EETypePtr pEEType, out int arity, out EETypePtr *ppInstantiation, out byte *varianceInfo);