System.Type.GetConstructorImpl C# (CSharp) Method

GetConstructorImpl() protected method

When overridden in a derived class, searches for a constructor whose parameters match the specified argument types and modifiers, using the specified binding constraints and the specified calling convention.
is null.-or- One of the elements in is null. is multidimensional.-or- is multidimensional.-or- and do not have the same length. The current type is a or .
protected GetConstructorImpl ( BindingFlags bindingAttr, Binder binder, CallingConventions callConvention, Type types, ParameterModifier modifiers ) : ConstructorInfo
bindingAttr BindingFlags A bitmask comprised of one or more that specify how the search is conducted.-or- Zero, to return null.
binder Binder An object that defines a set of properties and enables binding, which can involve selection of an overloaded method, coercion of argument types, and invocation of a member through reflection.-or- A null reference (Nothing in Visual Basic), to use the .
callConvention CallingConventions The object that specifies the set of rules to use regarding the order and layout of arguments, how the return value is passed, what registers are used for arguments, and the stack is cleaned up.
types Type An array of objects representing the number, order, and type of the parameters for the constructor to get.-or- An empty array of the type (that is, Type[] types = new Type[0]) to get a constructor that takes no parameters.
modifiers ParameterModifier An array of objects representing the attributes associated with the corresponding element in the array. The default binder does not process this parameter.
return ConstructorInfo
        protected ConstructorInfo GetConstructorImpl(BindingFlags bindingAttr, Binder binder, CallingConventions callConvention, Type[] types, ParameterModifier[] modifiers)
        {
            foreach (var method in constructors)
            {
                if ((bindingAttr & BindingFlags.NonPublic) != BindingFlags.NonPublic && !method.IsPublic)
                    continue;
                var parameters = method.GetParametersNoCopy();
                if (types != null && types.Length != parameters.Length)
                    continue;
                if (types != null)
                {
                    bool isValid = true;
                    for (var i = 0; i < types.Length; i++)
                        if (types[i] != parameters[i].ParameterType)
                            isValid = false;
                    if (!isValid)
                        continue;
                }
                return method;
            }
            return null;
        }