Exemplo n.º 1
0
        private static void EmitCtor(TypeBuilder tBuilder, ConstructorInfo ctor)
        {
            var pTypes  = ctor.GetParameters().Select(p => p.ParameterType).ToArray();
            var builder = ProxyUtils.GetConstructor(
                tBuilder,
                MethodAttributes.Public |
                MethodAttributes.HideBySig |
                MethodAttributes.SpecialName |
                MethodAttributes.RTSpecialName,
                pTypes
                );
            var ilGen = builder.GetILGenerator();

            // No locals

            // Load all args, note arg 0 is this pointer, so must emit one more
            for (int i = 0; i <= pTypes.Length; i++)
            {
                DoEmit(ilGen, OpCodes.Ldarg_S, i);
            }
            // Call base ctor
            DoEmit(ilGen, OpCodes.Call, ctor);

            // Return
            DoEmit(ilGen, OpCodes.Ret);
        }