Compartir a través de


Type.GetConstructors Método

Definición

Obtiene los constructores del objeto Type actual.

Sobrecargas

GetConstructors()

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

GetConstructors(BindingFlags)

Cuando se invalida en una clase derivada, busca los constructores definidos para el objeto Type actual, con las enumeraciones BindingFlags especificadas.

Ejemplos

En este ejemplo se muestra la salida de la GetConstructors() sobrecarga de una clase que tiene dos constructores de instancia y un constructor estático.

using namespace System;
using namespace System::Reflection;
public ref class t
{
public:
   t(){}

   static t(){}

   t( int /*i*/ ){}

};

int main()
{
   array<ConstructorInfo^>^p = t::typeid->GetConstructors();
   Console::WriteLine( p->Length );
   for ( int i = 0; i < p->Length; i++ )
   {
      Console::WriteLine( p[ i ]->IsStatic );

   }
}
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);
        }
    }
}
type t() =
    static do ()
    new(i: int) = t ()

let p = typeof<t>.GetConstructors()
printfn $"{p.Length}"

for c in p do
    printfn $"{c.IsStatic}"
Imports System.Reflection

Public Class t
    
    Public Sub New()
    End Sub
    
    Shared Sub New()
    End Sub
    
    Public Sub New(i As Integer)
    End Sub
     
    Public Shared Sub Main()
        Dim p As ConstructorInfo() = GetType(t).GetConstructors()
        Console.WriteLine(p.Length)
        
        Dim i As Integer
        For i = 0 To p.Length - 1
            Console.WriteLine(p(i).IsStatic)
        Next i
    End Sub
End Class

El resultado del código es el siguiente:

2
False
False

Dado que la GetConstructors sobrecarga usa solo Public y Instance, el constructor estático no se cuenta por la for expresión ni se evalúa por IsStatic.

Para buscar constructores estáticos, use la GetConstructors sobrecarga y pásela la combinación (OR lógico) de BindingFlags.Public, BindingFlags.NonPublicBindingFlags.Static, , BindingFlags.Instancecomo se muestra en el ejemplo de código siguiente:

using namespace System;
using namespace System::Reflection;
public ref class t
{
public:
   t(){}

   t( int /*i*/ ){}

   static t(){}

};

int main()
{
   array<ConstructorInfo^>^p = t::typeid->GetConstructors( static_cast<BindingFlags>(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 );
   }
}
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);
        }
    }
}
open System.Reflection

type t() =
    static do ()
    new (i: int) = t ()

let p = typeof<t>.GetConstructors(BindingFlags.Public ||| BindingFlags.Static ||| BindingFlags.NonPublic ||| BindingFlags.Instance)
printfn $"{p.Length}"

for c in p do
    printfn $"{c.IsStatic}"
Imports System.Reflection

Public Class t
    
    Public Sub New()
    End Sub
    
    Shared Sub New()
    End Sub
    
    Public Sub New(i As Integer)
    End Sub
     
    Public Shared Sub Main()
        Dim p As ConstructorInfo() = GetType(T).GetConstructors( _
           BindingFlags.Public Or _
           BindingFlags.Static Or _
           BindingFlags.NonPublic Or _
           BindingFlags.Instance)
        Console.WriteLine(p.Length)
        
        Dim i As Integer
        For i = 0 To p.Length - 1
            Console.WriteLine(p(i).IsStatic)
        Next i
    End Sub
End Class

Ahora la salida es:

3
False
True
False

GetConstructors()

Source:
Type.cs
Source:
Type.cs
Source:
Type.cs

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

public:
 cli::array <System::Reflection::ConstructorInfo ^> ^ GetConstructors();
public:
 virtual cli::array <System::Reflection::ConstructorInfo ^> ^ GetConstructors();
public System.Reflection.ConstructorInfo[] GetConstructors ();
[System.Runtime.InteropServices.ComVisible(true)]
public System.Reflection.ConstructorInfo[] GetConstructors ();
member this.GetConstructors : unit -> System.Reflection.ConstructorInfo[]
abstract member GetConstructors : unit -> System.Reflection.ConstructorInfo[]
override this.GetConstructors : unit -> System.Reflection.ConstructorInfo[]
[<System.Runtime.InteropServices.ComVisible(true)>]
abstract member GetConstructors : unit -> System.Reflection.ConstructorInfo[]
override this.GetConstructors : unit -> System.Reflection.ConstructorInfo[]
Public Function GetConstructors () As ConstructorInfo()

Devoluciones

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.

Implementaciones

Atributos

Comentarios

En .NET 6 y versiones anteriores, 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 el que se devuelven los constructores, ya que ese orden varía. Sin embargo, a partir de .NET 7, el orden es determinista en función del orden de metadatos del ensamblado.

En la tabla siguiente se muestra qué miembros de una clase base devuelven los Get métodos al reflejar en un tipo.

Tipo de miembro Estático No estático
Constructor No No
Campo No Sí. Un campo siempre se oculta por nombre y firma.
evento No es aplicable La regla del sistema de tipos común es que la herencia es la misma que la de los métodos que implementan la propiedad . La reflexión trata las propiedades como hide-by-name-and-signature. Consulte la nota 2 a continuación.
Método No Sí. Un método (tanto virtual como no virtual) puede ser hide-by-name u hide-by-name-and-signature.
Tipo anidado No No
Propiedad. No es aplicable La regla del sistema de tipos común es que la herencia es la misma que la de los métodos que implementan la propiedad . La reflexión trata las propiedades como hide-by-name-and-signature. Consulte la nota 2 a continuación.
  1. Hide-by-name-and-signature tiene en cuenta todas las partes de la firma, incluidos modificadores personalizados, tipos de valor devuelto, tipos de parámetros, sentinels y convenciones de llamada no administradas. Se trata de una comparación binaria.

  2. Para la reflexión, las propiedades y los eventos son hide-by-name-and-signature. Si tiene una propiedad con un descriptor de acceso get y un set en la clase base, pero la clase derivada solo tiene un descriptor de acceso get, la propiedad de clase derivada oculta la propiedad de clase base y no podrá tener acceso al establecedor en la clase base.

  3. Los atributos personalizados no forman parte del sistema de tipos común.

Esta sobrecarga de método llama a la sobrecarga del GetConstructors(BindingFlags) método , con | BindingFlags.InstanceBindingFlags.Public(BindingFlags.PublicOrBindingFlags.Instance en Visual Basic). No encontrará inicializadores de clase (constructor estático). Para buscar inicializadores de clase, use una sobrecarga que tome BindingFlagsy especifique BindingFlags.StaticBindingFlags.NonPublic | (BindingFlags.StaticOrBindingFlags.NonPublic en Visual Basic). También puede obtener el inicializador de clase mediante la TypeInitializer propiedad .

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

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

Consulte también

Se aplica a

GetConstructors(BindingFlags)

Source:
Type.cs
Source:
Type.cs
Source:
Type.cs

Cuando se invalida en una clase derivada, busca los constructores definidos para el objeto Type actual, con las enumeraciones BindingFlags especificadas.

public:
 abstract cli::array <System::Reflection::ConstructorInfo ^> ^ GetConstructors(System::Reflection::BindingFlags bindingAttr);
public abstract System.Reflection.ConstructorInfo[] GetConstructors (System.Reflection.BindingFlags bindingAttr);
[System.Runtime.InteropServices.ComVisible(true)]
public abstract System.Reflection.ConstructorInfo[] GetConstructors (System.Reflection.BindingFlags bindingAttr);
abstract member GetConstructors : System.Reflection.BindingFlags -> System.Reflection.ConstructorInfo[]
[<System.Runtime.InteropServices.ComVisible(true)>]
abstract member GetConstructors : System.Reflection.BindingFlags -> System.Reflection.ConstructorInfo[]
Public MustOverride Function GetConstructors (bindingAttr As BindingFlags) As ConstructorInfo()

Parámetros

bindingAttr
BindingFlags

Combinación bit a bit de los valores de enumeración que especifican cómo se realiza la búsqueda.

O bien

Default para que se devuelva una matriz vacía.

Devoluciones

Matriz de ConstructorInfo objetos que representan todos los constructores definidos para el actual Type que coinciden con las restricciones de enlace especificadas, incluido el inicializador de tipo si se define. Devuelve una matriz vacía de tipo ConstructorInfo si no se definen constructores para el objeto Type actual, si ninguno de los constructores definidos cumple las restricciones de enlace 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.

Implementaciones

Atributos

Comentarios

bindingAttr se puede usar para especificar si solo se devuelven constructores públicos o constructores públicos y no públicos.

Se pueden usar las marcas de filtro siguientes BindingFlags para definir qué constructores se van a incluir en la búsqueda:

  • Especifique BindingFlags.Static junto con BindingFlags.NonPublic para recuperar el inicializador de clase (constructor estático). También puede obtener el inicializador de clase mediante la TypeInitializer propiedad .

  • Especifique BindingFlags.Instance junto con uno o ambos de y BindingFlags.NonPublic para recuperar constructores de BindingFlags.Public instancia.

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

En .NET 6 y versiones anteriores, 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 el que se devuelven los constructores, ya que ese orden varía. Sin embargo, a partir de .NET 7, el orden es determinista en función del orden de metadatos del ensamblado.

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

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

Consulte también

Se aplica a