/// <summary> /// Matches the generic parameters of <paramref name="newMethod">a target method</paramref> /// </summary> /// <param name="newMethod">The generic method that contains the generic type arguments.</param> /// <param name="typeArguments">The array of <see cref="Type"/> objects that describe the generic parameters for the current method.</param> private static void MatchGenericArguments(MethodDefinition newMethod, ICollection <Type> typeArguments) { foreach (var argument in typeArguments) { newMethod.AddGenericParameter(argument); } }
/// <summary> /// Adds a new method to the <paramref name="typeDef">target type</paramref>. /// </summary> /// <param name="typeDef">The type that will hold the newly-created method.</param> /// <param name="attributes">The <see cref="MethodAttributes"/> parameter that describes the characteristics of the method.</param> /// <param name="methodName">The name to be given to the new method.</param> /// <param name="returnType">The method return type.</param> /// <param name="parameterTypes">The list of argument types that will be used to define the method signature.</param> /// <param name="genericParameterTypes">The list of generic argument types that will be used to define the method signature.</param> /// <returns>A <see cref="MethodDefinition"/> instance that represents the newly-created method.</returns> public static MethodDefinition DefineMethod(this TypeDefinition typeDef, string methodName, MethodAttributes attributes, Type returnType, Type[] parameterTypes, Type[] genericParameterTypes) { var method = new MethodDefinition(methodName, attributes, null); typeDef.Methods.Add(method); //Match the generic parameter types foreach (var genericParameterType in genericParameterTypes) { method.AddGenericParameter(genericParameterType); } // Match the parameter types method.AddParameters(parameterTypes); // Match the return type method.SetReturnType(returnType); return(method); }
/// <summary> /// Adds a new method to the <paramref name="typeDef">target type</paramref>. /// </summary> /// <param name="typeDef">The type that will hold the newly-created method.</param> /// <param name="attributes">The <see cref="Mono.Cecil.MethodAttributes"/> parameter that describes the characteristics of the method.</param> /// <param name="methodName">The name to be given to the new method.</param> /// <param name="returnType">The method return type.</param> /// <param name="parameterTypes">The list of argument types that will be used to define the method signature.</param> /// <param name="genericParameterTypes">The list of generic argument types that will be used to define the method signature.</param> /// <returns>A <see cref="MethodDefinition"/> instance that represents the newly-created method.</returns> public static MethodDefinition DefineMethod(this TypeDefinition typeDef, string methodName, Mono.Cecil.MethodAttributes attributes, System.Type returnType, System.Type[] parameterTypes, System.Type[] genericParameterTypes) { var method = new MethodDefinition(methodName, attributes, typeDef.Module.Import(typeof(object))); typeDef.Methods.Add(method); //Match the generic parameter types foreach (var genericParameterType in genericParameterTypes) { method.AddGenericParameter(genericParameterType); } // Match the parameter types method.AddParameters(parameterTypes); // Match the return type method.SetReturnType(returnType); return(method); }