public override object Invoke(System.Reflection.BindingFlags invokeAttr, Binder binder, object[] parameters, CultureInfo culture) { INVOCATION_FLAGS invocationFlags = this.InvocationFlags; RuntimeTypeHandle typeHandle = this.m_declaringType.TypeHandle; if ((invocationFlags & (INVOCATION_FLAGS.INVOCATION_FLAGS_CONTAINS_STACK_POINTERS | INVOCATION_FLAGS.INVOCATION_FLAGS_NO_CTOR_INVOKE | INVOCATION_FLAGS.INVOCATION_FLAGS_NO_INVOKE)) != INVOCATION_FLAGS.INVOCATION_FLAGS_UNKNOWN) { this.ThrowNoInvokeException(); } if ((invocationFlags & (INVOCATION_FLAGS.INVOCATION_FLAGS_FIELD_SPECIAL_CAST | INVOCATION_FLAGS.INVOCATION_FLAGS_IS_DELEGATE_CTOR | INVOCATION_FLAGS.INVOCATION_FLAGS_NEED_SECURITY)) != INVOCATION_FLAGS.INVOCATION_FLAGS_UNKNOWN) { if ((invocationFlags & INVOCATION_FLAGS.INVOCATION_FLAGS_FIELD_SPECIAL_CAST) != INVOCATION_FLAGS.INVOCATION_FLAGS_UNKNOWN) { CodeAccessPermission.Demand(PermissionType.ReflectionMemberAccess); } if ((invocationFlags & INVOCATION_FLAGS.INVOCATION_FLAGS_NEED_SECURITY) != INVOCATION_FLAGS.INVOCATION_FLAGS_UNKNOWN) { RuntimeMethodHandle.PerformSecurityCheck(null, this, this.m_declaringType, (uint)(this.m_invocationFlags | INVOCATION_FLAGS.INVOCATION_FLAGS_CONSTRUCTOR_INVOKE)); } if ((invocationFlags & INVOCATION_FLAGS.INVOCATION_FLAGS_IS_DELEGATE_CTOR) != INVOCATION_FLAGS.INVOCATION_FLAGS_UNKNOWN) { new SecurityPermission(SecurityPermissionFlag.UnmanagedCode).Demand(); } } int length = this.Signature.Arguments.Length; int num2 = (parameters != null) ? parameters.Length : 0; if (length != num2) { throw new TargetParameterCountException(Environment.GetResourceString("Arg_ParmCnt")); } if (num2 <= 0) { return(RuntimeMethodHandle.InvokeConstructor(this, null, (SignatureStruct)this.Signature, this.m_declaringType)); } object[] args = base.CheckArguments(parameters, binder, invokeAttr, culture, this.Signature); object obj2 = RuntimeMethodHandle.InvokeConstructor(this, args, (SignatureStruct)this.Signature, this.m_declaringType); for (int i = 0; i < num2; i++) { parameters[i] = args[i]; } return(obj2); }