Type.GetConstructors Método

Definição

Obtém os construtores do Type atual.Gets the constructors of the current Type.

Sobrecargas

GetConstructors()

Retorna todos os construtores públicos definidos para o Type atual.Returns all the public constructors defined for the current Type.

GetConstructors(BindingFlags)

Quando substituído em uma classe derivada, pesquisa os construtores definidos para o Type atual usando os BindingFlags especificados.When overridden in a derived class, searches for the constructors defined for the current Type, using the specified BindingFlags.

GetConstructors()

Retorna todos os construtores públicos definidos para o Type atual.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()

Retornos

Uma matriz de objetos ConstructorInfo que representa todos os construtores de instância pública definidos para o Type atual, mas não incluindo o inicializador de tipo (construtor 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). Se nenhum construtor de instância pública for definido para o Type atual ou se o Type atual representar um parâmetro de tipo na definição de um tipo ou método genérico, uma matriz vazia do tipo ConstructorInfo será retornada.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.

Implementações

Atributos

Exemplos

Este exemplo mostra a saída da GetConstructors sobrecarga de uma classe que tem dois construtores de instância e um construtor 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

A saída desse código é:The output of this code is:

22

FalseFalse

FalseFalse

Como a GetConstructors() sobrecarga usa apenas BindingFlags.Public e BindingFlags.Instance, for o construtor estático não é contado pela expressão nem avaliado por IsStatic.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 localizar construtores estáticos, use a GetConstructors(BindingFlags) sobrecarga e passe a combinação (lógica BindingFlags.Instance OR) de BindingFlags.Public, BindingFlags.Static BindingFlags.NonPublic,,, conforme mostrado no exemplo de código a seguir: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

Agora a saída é:Now the output is:

33

FalseFalse

verdadeiroTrue

FalseFalse

Comentários

O GetConstructors método não retorna construtores em uma ordem específica, como a ordem de declaração.The GetConstructors method does not return constructors in a particular order, such as declaration order. Seu código não deve depender da ordem na qual os construtores são retornados, pois essa ordem varia.Your code must not depend on the order in which constructors are returned, because that order varies.

A tabela a seguir mostra quais membros de uma classe base são retornados pelos métodos Get durante a reflexão em um tipo.The following table shows what members of a base class are returned by the Get methods when reflecting on a type.

Tipo do membroMember Type EstáticoStatic Não estáticoNon-Static
ConstrutorConstructor NãoNo NãoNo
CampoField NãoNo Sim.Yes. Um campo permanece sempre oculto por nome e assinatura.A field is always hide-by-name-and-signature.
eventoEvent Não aplicávelNot applicable A regra de sistema do tipo comum é que a herança é a mesma dos métodos que implementam a propriedade.The common type system rule is that the inheritance is the same as that of the methods that implement the property. Reflexão trata propriedades como ocultas por nome e assinatura.Reflection treats properties as hide-by-name-and-signature. Consulte a observação 2 abaixo.See note 2 below.
MétodoMethod NãoNo Sim.Yes. Um método (virtual e não virtual) pode permanecer oculto por nome ou por nome e assinatura.A method (both virtual and non-virtual) can be hide-by-name or hide-by-name-and-signature.
Tipo aninhadoNested Type NãoNo NãoNo
PropriedadeProperty Não aplicávelNot applicable A regra de sistema do tipo comum é que a herança é a mesma dos métodos que implementam a propriedade.The common type system rule is that the inheritance is the same as that of the methods that implement the property. Reflexão trata propriedades como ocultas por nome e assinatura.Reflection treats properties as hide-by-name-and-signature. Consulte a observação 2 abaixo.See note 2 below.
  1. Oculto por nome e assinatura considera todas as partes da assinatura, inclusive modificadores personalizados, tipos de retorno, tipos de parâmetro, sentinelas e convenções de chamada não gerenciadas.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 é uma comparação binária.This is a binary comparison.

  2. Para reflexão, propriedades e eventos permanecem ocultos por nome e assinatura.For reflection, properties and events are hide-by-name-and-signature. Se você tiver uma propriedade com um acessador get e set na classe base, mas a classe derivada tiver apenas um acessador get, a propriedade de classe derivada ocultará a propriedade da classe base e você não poderá acessar o setter na classe 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. Atributos personalizados não fazem parte do sistema de tipo comum.Custom attributes are not part of the common type system.

Essa sobrecarga de método chama GetConstructors(BindingFlags) a sobrecarga do método BindingFlags.Public ,BindingFlags.Public | BindingFlags.Instance com (Or BindingFlags.Instance em Visual Basic).This method overload calls the GetConstructors(BindingFlags) method overload, with BindingFlags.Public | BindingFlags.Instance (BindingFlags.PublicOrBindingFlags.Instance in Visual Basic). Ele não encontrará inicializadores de classe (Construtor estático).It will not find class initializers (static constructor). Para localizar inicializadores de classe, use uma sobrecarga que BindingFlagsaceite e especifique BindingFlags.Static | BindingFlags.NonPublic (BindingFlags.Static Or BindingFlags.NonPublic em Visual Basic).To find class initializers, use an overload that takes BindingFlags, and specify BindingFlags.Static | BindingFlags.NonPublic (BindingFlags.StaticOrBindingFlags.NonPublic in Visual Basic). Também é possível obter o inicializador da classe usando-se a propriedade TypeInitializer.You can also get the class initializer using the TypeInitializer property.

Se o atual Type representar um tipo genérico construído, esse método retornará os ConstructorInfo objetos com os parâmetros de tipo substituídos pelos argumentos de tipo apropriados.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 exemplo, se a C<T> classe tiver um C(T t1) ConstrutorSub New(ByVal t1 As T) (em Visual Basic), GetConstructors chamar C<int> em retorna ConstructorInfo um que C(int t1) representa C# (Sub New(ByVal t1 As Integer) no 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).

Se o atual Type representar um parâmetro de tipo genérico, GetConstructors o método retornará uma matriz vazia.If the current Type represents a generic type parameter, the GetConstructors method returns an empty array.

Veja também

GetConstructors(BindingFlags)

Quando substituído em uma classe derivada, pesquisa os construtores definidos para o Type atual usando os BindingFlags especificados.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

Uma combinação bit a bit dos valores de enumeração que especificam como a pesquisa é realizada.A bitwise combination of the enumeration values that specify how the search is conducted.

- ou --or- Default para retornar uma matriz vazia.Default to return an empty array.

Retornos

Uma matriz de objetos ConstructorInfo representando todos os construtores definidos para o Type atual que corresponde às restrições de associação especificadas, incluindo o inicializador de tipo, se ele estiver 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. Retorna uma matriz vazia do tipo ConstructorInfo se nenhum construtor estiver definido para o Type atual, se nenhum dos construtores definidos corresponderem às restrições de associação ou se o Type atual representar um parâmetro de tipo na definição de um tipo genérico ou 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.

Implementações

Atributos

Exemplos

Este exemplo mostra a saída da GetConstructors() sobrecarga de uma classe que tem dois construtores de instância e um construtor 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

A saída desse código é:The output of this code is:

22

FalseFalse

FalseFalse

Como a GetConstructors sobrecarga usa apenas Public e Instance, for o construtor estático não é contado pela expressão nem avaliado por IsStatic.Because the GetConstructors overload uses only Public and Instance, the static constructor is neither counted by the for expression nor evaluated by IsStatic.

Para localizar construtores estáticos, use a GetConstructors sobrecarga e passe-o para a combinação (OR lógico) BindingFlags.Publicde BindingFlags.Static, BindingFlags.NonPublic BindingFlags.Instance,,, conforme mostrado no exemplo de código a seguir: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

Agora a saída é:Now the output is:

33

FalseFalse

verdadeiroTrue

FalseFalse

Comentários

bindingAttrpode ser usado para especificar se deve retornar apenas construtores públicos ou tanto construtores públicos quanto não públicos.bindingAttr can be used to specify whether to return only public constructors or both public and non-public constructors.

Os seguintes sinalizadores de filtro BindingFlags podem ser usados para definir quais construtores devem ser incluídos na pesquisa:The following BindingFlags filter flags can be used to define which constructors to include in the search:

  • Especifique BindingFlags.Static junto com BindingFlags.NonPublic para recuperar o inicializador de classe (Construtor estático).Specify BindingFlags.Static along with BindingFlags.NonPublic to retrieve the class initializer (static constructor). Também é possível obter o inicializador da classe usando-se a propriedade TypeInitializer.You can also get the class initializer using the TypeInitializer property.

  • Especifique BindingFlags.Instance junto com um ou ambos de BindingFlags.Public e BindingFlags.NonPublic para recuperar construtores de instância.Specify BindingFlags.Instance along with one or both of BindingFlags.Public and BindingFlags.NonPublic to retrieve instance constructors.

Consulte System.Reflection.BindingFlags para obter mais informações.See System.Reflection.BindingFlags for more information.

O GetConstructors método não retorna construtores em uma ordem específica, como a ordem de declaração.The GetConstructors method does not return constructors in a particular order, such as declaration order. Seu código não deve depender da ordem na qual os construtores são retornados, pois essa ordem varia.Your code must not depend on the order in which constructors are returned, because that order varies.

Se o atual Type representar um tipo genérico construído, esse método retornará os ConstructorInfo objetos com os parâmetros de tipo substituídos pelos argumentos de tipo apropriados.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 exemplo, se a C<T> classe tiver um C(T t1) ConstrutorSub New(ByVal t1 As T) (em Visual Basic), GetConstructors chamar C<int> em retorna ConstructorInfo um que C(int t1) representa C# (Sub New(ByVal t1 As Integer) no 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).

Se o atual Type representar um parâmetro de tipo genérico, GetConstructors o método retornará uma matriz vazia.If the current Type represents a generic type parameter, the GetConstructors method returns an empty array.

Veja também

Aplica-se a