Este artículo se tradujo automáticamente. Para ver el artículo en inglés, active la casilla Inglés. Además, puede mostrar el texto en inglés en una ventana emergente si mueve el puntero del mouse sobre el texto.
Traducción
Inglés

Método Type.GetConstructor (BindingFlags, Binder, CallingConventions, Type[], ParameterModifier[])

 

Publicado: octubre de 2016

Busca un constructor cuyos parámetros coincidan con los modificadores y tipos de argumento especificados, mediante las restricciones de enlace indicadas y la convención de llamadas también especificada.

Espacio de nombres:   System
Ensamblado:  mscorlib (en mscorlib.dll)

[ComVisibleAttribute(true)]
public ConstructorInfo GetConstructor(
	BindingFlags bindingAttr,
	Binder binder,
	CallingConventions callConvention,
	Type[] types,
	ParameterModifier[] modifiers
)

Parámetros

bindingAttr
Type: System.Reflection.BindingFlags

Máscara de bits formada por una o varias enumeraciones BindingFlags que especifican la forma en que se realiza la búsqueda.

o bien

Cero, para devolver null.

binder
Type: System.Reflection.Binder

Objeto que define un conjunto de propiedades y permite realizar operaciones de enlace, que pueden incluir la selección de un método sobrecargado, la coerción de tipos de argumentos y la invocación de un miembro mediante reflexión.

o bien

Referencia nula (Nothing en Visual Basic) para usar la propiedad DefaultBinder.

callConvention
Type: System.Reflection.CallingConventions

Objeto que especifica el conjunto de reglas que se va a usar en cuanto al orden y al diseño de los argumentos, la forma de pasar el valor devuelto, los registros que se usan para los argumentos y la pila que se limpia.

types
Type: System.Type[]

Matriz de objetos Type que representa el número, el orden y el tipo de parámetros que el constructor debe obtener.

o bien

Matriz vacía del tipo Type (es decir, Type[] types = new Type[0]) para obtener un constructor que no requiera parámetros.

modifiers
Type: System.Reflection.ParameterModifier[]

Matriz de objetos ParameterModifier que representan los atributos asociados al elemento correspondiente de la matriz types. El enlazador predeterminado no procesa este parámetro.

Valor devuelto

Type: System.Reflection.ConstructorInfo

Objeto que representa el constructor que cumple los requisitos especificados, si se encuentra; en caso contrario, es null.

Exception Condition
ArgumentNullException

El valor de types es null.

O bien

Uno de los elementos de types es null.

ArgumentException

types es multidimensional.

O bien

modifiers es multidimensional.

O bien

types y modifiers no tienen la misma longitud.

Aunque el enlazador predeterminado no procesa ParameterModifier (la modifiers parámetro), puede utilizar la abstracta System.Reflection.Binder clase para escribir un enlazador personalizado que procesan modifiers. ParameterModifiersolo se utiliza cuando se llama mediante la interoperabilidad COM, y se administran sólo los parámetros que se pasan por referencia.

Si no existe una coincidencia exacta, la binder intentará convertir los tipos de parámetro especificados en la types matriz para seleccionar una coincidencia. Si el binder no puede seleccionar una coincidencia, a continuación, null se devuelve.

El siguiente BindingFlags marcas de filtro se pueden utilizar para definir los constructores que deben incluirse en la búsqueda:

  • Debe especificar BindingFlags.Instance o BindingFlags.Static con el fin de obtener un valor devuelto.

  • Especificar BindingFlags.Public para incluir constructores públicos en la búsqueda.

  • Especificar BindingFlags.NonPublic para incluir constructores no públicos (es decir, constructores privados, internos y protegidos) en la búsqueda.

Vea System.Reflection.BindingFlags para obtener más información.

Para obtener el inicializador de clase (.cctor) utilizando este método, se debe especificar BindingFlags.Static | BindingFlags.NonPublic (BindingFlags.StaticOrBindingFlags.NonPublic in Visual Basic). También puede obtener el inicializador de clase utilizando la TypeInitializer propiedad.

La siguiente tabla muestra qué miembros de una clase base se devuelven los Get métodos cuando se reflejan en un tipo.

Tipo de miembro

Estático

No estáticos

Constructor

No

No

Campo

No

Sí. Un campo siempre es ocultar por nombre y firma.

Evento

No es aplicable

La regla de sistema de tipo común es que la herencia es igual que la de los métodos que implementa la propiedad. La reflexión trata las propiedades como ocultar por nombre y firma. Véase la nota 2.

Método

No

Sí. Un método (virtual y no virtuales) pueden ocultar por nombre u ocultar por nombre y firma.

Tipo anidado

No

No

Propiedad

No es aplicable

La regla de sistema de tipo común es que la herencia es igual que la de los métodos que implementa la propiedad. La reflexión trata las propiedades como ocultar por nombre y firma. Véase la nota 2.

  1. Ocultar por nombre y firma considera que todas las partes de la firma, incluidos los modificadores personalizados, devuelven tipos, tipos de parámetro, centinelas y las convenciones de llamada no administradas. Se trata de una comparación binaria.

  2. Para la reflexión, propiedades y eventos están ocultos por nombre y firma. Si tiene una propiedad con una operación get y un descriptor de acceso de la clase base, pero la clase derivada tiene solo un descriptor de acceso get, la propiedad de clase derivada oculta la propiedad de clase base y no podrá tener acceso el establecedor de la clase base.

  3. Atributos personalizados no forman parte del sistema de tipos comunes.

System_CAPS_noteNota

No se puede omitir los parámetros al buscar constructores y métodos. Solo puede omitir los parámetros al invocar.

Si la actual Type representa un tipo genérico construido, este método devuelve el ConstructorInfo con los parámetros de tipo sustituidos por los argumentos de tipo adecuado. Si la actual Type representa un parámetro de tipo en la definición de un tipo genérico o un método genérico, este método devuelve siempre null.

En el ejemplo siguiente se obtiene el tipo de MyClass1, obtiene la ConstructorInfo objeto que coincide con las marcas de enlace especificadas y muestra la firma del constructor.

using System;
using System.Reflection;
using System.Security;

public class MyClass1
{
    public MyClass1(int i){}
    public static void Main()
    {
        try
        {
            Type  myType = typeof(MyClass1);
            Type[] types = new Type[1];
            types[0] = typeof(int);
            // Get the public instance constructor that takes an integer parameter.
            ConstructorInfo constructorInfoObj = myType.GetConstructor(
                BindingFlags.Instance | BindingFlags.Public, null,
                CallingConventions.HasThis, types, null);
            if(constructorInfoObj != null)
            {
                Console.WriteLine("The constructor of MyClass1 that is a public " +
                    "instance method and takes an integer as a parameter is: ");
                Console.WriteLine(constructorInfoObj.ToString());
            }
            else
            {
                Console.WriteLine("The constructor of MyClass1 that is a public instance " +
                    "method and takes an integer as a parameter is not available.");
            }
        }
        catch(ArgumentNullException e)
        {
            Console.WriteLine("ArgumentNullException: " + e.Message);
        }
        catch(ArgumentException e)
        {
            Console.WriteLine("ArgumentException: " + e.Message);
        }
        catch(SecurityException e)
        {
            Console.WriteLine("SecurityException: " + e.Message);
        }
        catch(Exception e)
        {
            Console.WriteLine("Exception: " + e.Message);
        }
    }
}

.NET Framework
Disponible desde 1.1
Volver al principio
Mostrar: