Type.GetConstructors Método

Definición

Obtiene los constructores del objeto Type actual.Gets the constructors of the current Type.

Sobrecargas

GetConstructors()

Devuelve todos los constructores públicos definidos para el objeto Type actual.Returns all the public constructors defined for the current Type.

GetConstructors(BindingFlags)

Cuando se invalida en una clase derivada, busca los constructores definidos para el objeto Type actual, con las enumeraciones BindingFlags especificadas.When overridden in a derived class, searches for the constructors defined for the current Type, using the specified BindingFlags.

GetConstructors()

Devuelve todos los constructores públicos definidos para el objeto Type actual.Returns all the public constructors defined for the current Type.

public:
 virtual cli::array <System::Reflection::ConstructorInfo ^> ^ GetConstructors();
[System.Runtime.InteropServices.ComVisible(true)]
public System.Reflection.ConstructorInfo[] GetConstructors ();
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).An array of ConstructorInfo objects representing all the public instance constructors defined for the current Type, but not including the type initializer (static constructor). 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.If no public instance constructors are defined for the current Type, or if the current Type represents a type parameter in the definition of a generic type or generic method, an empty array of type ConstructorInfo is returned.

Implementaciones

Atributos

Ejemplos

En este ejemplo se muestra la salida GetConstructors de la sobrecarga de una clase que tiene dos constructores de instancia y un constructor estático.This example shows the output of the GetConstructors overload from a class that has two instance constructors and one static constructor.

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);
        }
    }
}
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 de este código es:The output of this code is:

22

FalseFalse

FalseFalse

Dado que GetConstructors() la sobrecarga utiliza BindingFlags.Public solo BindingFlags.Instancey, el constructor estático no se cuenta ni for se evalúa IsStaticpor la expresión.Because the GetConstructors() overload uses only BindingFlags.Public and BindingFlags.Instance, the static constructor is neither counted by the for expression nor evaluated by IsStatic.

Para buscar constructores estáticos, utilice GetConstructors(BindingFlags) la sobrecarga y pase la combinación (lógica OR) de BindingFlags.Public, BindingFlags.Static, BindingFlags.NonPublic, BindingFlags.Instance, tal y como se muestra en el ejemplo de código siguiente:To find static constructors, use the GetConstructors(BindingFlags) overload, and pass the combination (logical OR) of BindingFlags.Public, BindingFlags.Static, BindingFlags.NonPublic, BindingFlags.Instance, as shown in the following code example:

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);
        }
    }
}
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, el resultado es:Now the output is:

33

FalseFalse

TrueTrue

FalseFalse

Comentarios

El GetConstructors método no devuelve constructores en un orden determinado, como el orden de declaración.The GetConstructors method does not return constructors in a particular order, such as declaration order. El código no debe depender del orden en el que se devuelven los constructores, ya que ese orden varía.Your code must not depend on the order in which constructors are returned, because that order varies.

En la tabla siguiente se muestra qué miembros de una clase base son devueltos por los Get métodos cuando se reflejan en un tipo.The following table shows what members of a base class are returned by the Get methods when reflecting on a type.

Tipo de miembroMember Type EstáticoStatic No estáticaNon-Static
ConstructorConstructor NoNo NoNo
CampoField NoNo Sí.Yes. Un campo siempre se oculta por nombre y firma.A field is always hide-by-name-and-signature.
eventoEvent No es aplicableNot applicable La regla del sistema de tipos comunes es que la herencia es la misma que la de los métodos que implementan la propiedad.The common type system rule is that the inheritance is the same as that of the methods that implement the property. La reflexión trata las propiedades como ocultas por nombre y firma.Reflection treats properties as hide-by-name-and-signature. Vea la nota 2 a continuación.See note 2 below.
MétodoMethod NoNo Sí.Yes. Un método (tanto virtual como no virtual) se puede ocultar por nombre u ocultar por nombre y por firma.A method (both virtual and non-virtual) can be hide-by-name or hide-by-name-and-signature.
Tipo anidadoNested Type NoNo NoNo
Propiedad.Property No es aplicableNot applicable La regla del sistema de tipos comunes es que la herencia es la misma que la de los métodos que implementan la propiedad.The common type system rule is that the inheritance is the same as that of the methods that implement the property. La reflexión trata las propiedades como ocultas por nombre y firma.Reflection treats properties as hide-by-name-and-signature. Vea la nota 2 a continuación.See note 2 below.
  1. Ocultar por nombre y firma tiene en cuenta todas las partes de la firma, incluidos los modificadores personalizados, los tipos de valor devuelto, los tipos de parámetros, los Sentinel y las convenciones de llamada no administradas.Hide-by-name-and-signature considers all of the parts of the signature, including custom modifiers, return types, parameter types, sentinels, and unmanaged calling conventions. Esta es una comparación binaria.This is a binary comparison.

  2. En la reflexión, las propiedades y los eventos son Hide-by-Name y Signature.For reflection, properties and events are hide-by-name-and-signature. Si tiene una propiedad con un descriptor de acceso get y set en la clase base, pero la clase derivada solo tiene un descriptor de acceso get, la propiedad de la clase derivada oculta la propiedad de clase base y no podrá tener acceso al establecedor en la clase base.If you have a property with both a get and a set accessor in the base class, but the derived class has only a get accessor, the derived class property hides the base class property, and you will not be able to access the setter on the base class.

  3. Los atributos personalizados no forman parte del sistema de tipos comunes.Custom attributes are not part of the common type system.

Esta sobrecarga del método llama GetConstructors(BindingFlags) a la sobrecarga del BindingFlags.Public métodoBindingFlags.Public , | BindingFlags.Instance con (Or BindingFlags.Instance en Visual Basic).This method overload calls the GetConstructors(BindingFlags) method overload, with BindingFlags.Public | BindingFlags.Instance (BindingFlags.PublicOrBindingFlags.Instance in Visual Basic). No encontrará inicializadores de clase (constructor estático).It will not find class initializers (static constructor). Para buscar inicializadores de clase, use una sobrecarga que BindingFlagstome y especifique BindingFlags.Static | BindingFlags.NonPublic (BindingFlags.Static Or BindingFlags.NonPublic en Visual Basic).To find class initializers, use an overload that takes BindingFlags, and specify BindingFlags.Static | BindingFlags.NonPublic (BindingFlags.StaticOrBindingFlags.NonPublic in Visual Basic). También puede obtener el inicializador de clase mediante la TypeInitializer propiedad.You can also get the class initializer using the TypeInitializer property.

Si el objeto Type actual representa un tipo genérico construido, este método devuelve ConstructorInfo los objetos con los parámetros de tipo reemplazados por los argumentos de tipo adecuados.If the current Type represents a constructed generic type, this method returns the ConstructorInfo objects with the type parameters replaced by the appropriate type arguments. Por ejemplo, si la C<T> clase tiene un C(T t1) constructorSub New(ByVal t1 As T) (en Visual Basic), GetConstructors una C<int> llamada a ConstructorInfo en devuelve C(int t1) un C# queSub New(ByVal t1 As Integer) representa en (en Visual Básico).For example, if class C<T> has a constructor C(T t1) (Sub New(ByVal t1 As T) in Visual Basic), calling GetConstructors on C<int> returns a ConstructorInfo that represents C(int t1) in C# (Sub New(ByVal t1 As Integer) in Visual Basic).

Si el actual Type representa un parámetro de tipo genérico, GetConstructors el método devuelve una matriz vacía.If the current Type represents a generic type parameter, the GetConstructors method returns an empty array.

Consulte también:

GetConstructors(BindingFlags)

Cuando se invalida en una clase derivada, busca los constructores definidos para el objeto Type actual, con las enumeraciones BindingFlags especificadas.When overridden in a derived class, searches for the constructors defined for the current Type, using the specified BindingFlags.

public:
 abstract cli::array <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[]
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.A bitwise combination of the enumeration values that specify how the search is conducted.

O bien-or- Default para que se devuelva una matriz vacía.Default to return an empty array.

Devoluciones

Matriz de objetos ConstructorInfo que representa todos los constructores definidos para el objeto Type actual que coincidan con las restricciones de enlace especificadas, incluido el inicializador de tipo si está definido.An array of ConstructorInfo objects representing all constructors defined for the current Type that match the specified binding constraints, including the type initializer if it is defined. 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.Returns an empty array of type ConstructorInfo if no constructors are defined for the current Type, if none of the defined constructors match the binding constraints, or if the current Type represents a type parameter in the definition of a generic type or generic method.

Implementaciones

Atributos

Ejemplos

En este ejemplo se muestra la salida GetConstructors() de la sobrecarga de una clase que tiene dos constructores de instancia y un constructor estático.This example shows the output of the GetConstructors() overload from a class that has two instance constructors and one static constructor.

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);
        }
    }
}
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 de este código es:The output of this code is:

22

FalseFalse

FalseFalse

Dado que GetConstructors la sobrecarga utiliza Public solo Instancey, el constructor estático no se cuenta ni for se evalúa IsStaticpor la expresión.Because the GetConstructors overload uses only Public and Instance, the static constructor is neither counted by the for expression nor evaluated by IsStatic.

Para buscar constructores estáticos, utilice GetConstructors la sobrecarga y pásele la combinación (OR lógico) de BindingFlags.Public, BindingFlags.Static, BindingFlags.NonPublic, BindingFlags.Instance, tal y como se muestra en el ejemplo de código siguiente:To find static constructors, use the GetConstructors overload, and pass it the combination (logical OR) of BindingFlags.Public, BindingFlags.Static, BindingFlags.NonPublic, BindingFlags.Instance, as shown in the following code example:

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);
        }
    }
}
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, el resultado es:Now the output is:

33

FalseFalse

TrueTrue

FalseFalse

Comentarios

bindingAttrse puede utilizar para especificar si se devuelven solo constructores públicos o constructores públicos y no públicos.bindingAttr can be used to specify whether to return only public constructors or both public and non-public constructors.

Se pueden BindingFlags usar las siguientes marcas de filtro para definir los constructores que se van a incluir en la búsqueda:The following BindingFlags filter flags can be used to define which constructors to include in the search:

  • Especifique BindingFlags.Static junto con BindingFlags.NonPublic para recuperar el inicializador de clase (constructor estático).Specify BindingFlags.Static along with BindingFlags.NonPublic to retrieve the class initializer (static constructor). También puede obtener el inicializador de clase mediante la TypeInitializer propiedad.You can also get the class initializer using the TypeInitializer property.

  • Especifique BindingFlags.Instance junto con uno o ambos y BindingFlags.Public BindingFlags.NonPublic para recuperar constructores de instancia.Specify BindingFlags.Instance along with one or both of BindingFlags.Public and BindingFlags.NonPublic to retrieve instance constructors.

Vea System.Reflection.BindingFlags para obtener más información.See System.Reflection.BindingFlags for more information.

El GetConstructors método no devuelve constructores en un orden determinado, como el orden de declaración.The GetConstructors method does not return constructors in a particular order, such as declaration order. El código no debe depender del orden en el que se devuelven los constructores, ya que ese orden varía.Your code must not depend on the order in which constructors are returned, because that order varies.

Si el objeto Type actual representa un tipo genérico construido, este método devuelve ConstructorInfo los objetos con los parámetros de tipo reemplazados por los argumentos de tipo adecuados.If the current Type represents a constructed generic type, this method returns the ConstructorInfo objects with the type parameters replaced by the appropriate type arguments. Por ejemplo, si la C<T> clase tiene un C(T t1) constructorSub New(ByVal t1 As T) (en Visual Basic), GetConstructors una C<int> llamada a ConstructorInfo en devuelve C(int t1) un C# queSub New(ByVal t1 As Integer) representa en (en Visual Básico).For example, if class C<T> has a constructor C(T t1) (Sub New(ByVal t1 As T) in Visual Basic), calling GetConstructors on C<int> returns a ConstructorInfo that represents C(int t1) in C# (Sub New(ByVal t1 As Integer) in Visual Basic).

Si el actual Type representa un parámetro de tipo genérico, GetConstructors el método devuelve una matriz vacía.If the current Type represents a generic type parameter, the GetConstructors method returns an empty array.

Consulte también:

Se aplica a