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.GetConstructors ()

 

Publicado: octubre de 2016

Devuelve todos los constructores públicos definidos para el objeto Type actual.

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

[ComVisibleAttribute(true)]
public ConstructorInfo[] GetConstructors()

Valor devuelto

Type: System.Reflection.ConstructorInfo[]

Matriz de objetos ConstructorInfo que representan todos los constructores de instancias públicos definidos para el objeto Type actual, pero sin incluir el inicializador de tipo (constructor estático). Si no se han definido constructores de instancia públicos para el objeto Type actual o si el objeto Type actual representa un parámetro de tipo en la definición de un tipo genérico o de un método genérico, se devuelve una matriz vacía de tipo ConstructorInfo.

El GetConstructors método no devuelve constructores en un orden determinado, como el orden de declaración. El código no debe depender del orden en que se devuelven los constructores, porque ese orden varía.

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.

Esta sobrecarga de método llama a la GetConstructors(BindingFlags) sobrecarga del método con BindingFlags.Public | BindingFlags.Instance (BindingFlags.PublicOrBindingFlags.Instance in Visual Basic). No encontrará a inicializadores de clase (.cctor). Para buscar inicializadores de clase, use una sobrecarga que toma BindingFlagsy especifique BindingFlags.Static | BindingFlags.NonPublic (BindingFlags.StaticOrBindingFlags.NonPublic in Visual Basic). También puede obtener el inicializador de clase utilizando la TypeInitializer propiedad.

Si la actual Type representa un tipo genérico construido, este método devuelve el ConstructorInfo objetos con los parámetros de tipo sustituidos por los argumentos de tipo adecuado. Por ejemplo, si clase C<T> tiene un constructor C(T t1) (Sub New(ByVal t1 As T) en Visual Basic), la llamada a GetConstructors en C<int> devuelve un ConstructorInfo que representa C(int t1) en C# (Sub New(ByVal t1 As Integer) en Visual Basic).

Si la actual Type representa un parámetro de tipo genérico, la GetConstructors método devuelve una matriz vacía.

Este ejemplo muestra el resultado de la GetConstructors sobrecarga de una clase que tiene dos constructores de instancia y un constructor estático.

using System;
using System.Reflection;

public class t {
    public t() {}
    static t() {}
    public t(int i) {}

    public static void Main() {
        ConstructorInfo[] p = typeof(t).GetConstructors();
        Console.WriteLine(p.Length);

        for (int i=0;i<p.Length;i++) {
            Console.WriteLine(p[i].IsStatic);
        }
    }
}

El resultado de este código es:

2

False

False

Dado que la GetConstructors() solo usa la sobrecarga BindingFlags.Public y BindingFlags.Instance, el constructor estático no se calcula mediante la for expresión ni se evalúa con IsStatic.

Para buscar constructores estáticos, utilice el GetConstructors(BindingFlags) sobrecarga y pase la combinación (lógico OR) de BindingFlags.Public, BindingFlags.Static, BindingFlags.NonPublic, BindingFlags.Instance, tal y como se muestra en el ejemplo de código siguiente:

using System;
using System.Reflection;

public class t {
    public t() {}
    static t() {}
    public t(int i) {}

    public static void Main() {
        ConstructorInfo[] p = typeof(t).GetConstructors(
           BindingFlags.Public | BindingFlags.Static |
           BindingFlags.NonPublic | BindingFlags.Instance);
        Console.WriteLine(p.Length);

        for (int i=0;i<p.Length;i++) {
            Console.WriteLine(p[i].IsStatic);
        }
    }
}

Ahora, el resultado es:

3

False

True

False

.NET Framework
Disponible desde 1.1
Biblioteca de clases portable
Se admite en: plataformas portátiles de .NET
Silverlight
Disponible desde 2.0
Windows Phone Silverlight
Disponible desde 7.0
Volver al principio
Mostrar: