Telerik.Web.Mvc.Infrastructure.DynamicTypeBuilder.ImplementConstructor C# (CSharp) Method

ImplementConstructor() private static method

private static ImplementConstructor ( TypeBuilder newType, ConstructorInfo baseConstructor ) : void
newType System.Reflection.Emit.TypeBuilder
baseConstructor System.Reflection.ConstructorInfo
return void
        private static void ImplementConstructor(TypeBuilder newType, ConstructorInfo baseConstructor)
        {
            var parameters = baseConstructor.GetParameters();
            var parameterTypes = parameters.Select(p => p.ParameterType).ToArray();

            var constructor = newType.DefineConstructor(MethodAttributes.Public, baseConstructor.CallingConvention, parameterTypes);

            // parameter 0 is 'this', so we start at index 1
            for (int i = 0; i < parameters.Length; i++)
            {
                constructor.DefineParameter(i + 1, parameters[i].Attributes, parameters[i].Name);
            }

            var ilGenerator = constructor.GetILGenerator();
            for (int i = 0; i <= parameterTypes.Length; i++)
            {
                ilGenerator.Emit(OpCodes.Ldarg_S, (byte)i);
            }

            ilGenerator.Emit(OpCodes.Call, baseConstructor);
            ilGenerator.Emit(OpCodes.Ret);
        }