Esempio n. 1
0
        public static TypeBuilder AddInterfaceMethod(
            this TypeBuilder interfaceTypeBuilder,
            MethodInfo method,
            bool fallbackToString)
        {
            // Interface Method declaration
            MethodBuilder interfaceMethodBuilder = interfaceTypeBuilder
                                                   .DefineInterfaceMethod(
                method.Name,
                method.ReturnType.GetServiceCompatibleFallback(fallbackToString),
                method.GetParameterTypes(fallbackToString));

            interfaceMethodBuilder.CopySignatureOf(method);

            return(interfaceTypeBuilder);
        }
Esempio n. 2
0
        public static MethodBuilder ImplementInvocationOf(
            this MethodBuilder methodBuilder,
            MethodInfo method)
        {
            // Class Method implementation
            methodBuilder.CopySignatureOf(method);

            ILGenerator methodCodeGenerator = methodBuilder.GetILGenerator();

            int index = 1;

            foreach (var parameter in method.GetParameters())
            {
                methodCodeGenerator.Emit(OpCodes.Ldarg, index);
                index++;
            }

            methodCodeGenerator.Emit(OpCodes.Call, method);
            methodCodeGenerator.Emit(OpCodes.Ret);

            return(methodBuilder);
        }