Exemplo n.º 1
0
        private static void EmitInterfaceMethod(TypeBuilder tBuilder, string ns, MethodInfo method, MethodInfo invokeMethod, MethodInfo convertMethod)
        {
            #region Emit Signatue
            //  .method public hidebysig virtual instance void
            //      MethodName(xxx) cil managed
            //  {
            var           pTypes  = method.GetParameters().Select(p => p.ParameterType).ToArray();
            MethodBuilder builder = ProxyUtils.GetMethod(
                tBuilder,
                method.Name,
                MethodAttributes.Public |
                MethodAttributes.HideBySig |
                MethodAttributes.Virtual,
                method.ReturnType,
                pTypes);
            #endregion

            var ilGen = builder.GetILGenerator();

            EmitLocals(ilGen, method, pTypes);

            EmitHead(ilGen, method);

            EmitInvokeArguments(ilGen, ns, method, pTypes);

            EmitInvoke(ilGen, method, invokeMethod);

            EmitReturn(ilGen, method, convertMethod);
        }