Partilhar via


Type.GetConstructors Método

Definição

Obtém os construtores do atual Type.

Sobrecargas

Nome Description
GetConstructors()

Retorna todos os construtores públicos definidos para o atual Type.

GetConstructors(BindingFlags)

Quando substituído em uma classe derivada, pesquisa os construtores definidos para o atual Type, usando o especificado BindingFlags.

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.

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

A saída desse código é:

2
False
False

Como a GetConstructors sobrecarga usa apenas Public e Instanceo construtor estático não é contado pela for expressão nem avaliado por IsStatic.

Para localizar construtores estáticos, use a GetConstructors sobrecarga e passe a combinação (OR lógica) de BindingFlags.Public, BindingFlags.Static, BindingFlags.NonPublic, como BindingFlags.Instancemostrado no exemplo de código a seguir:

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

Agora a saída é:

3
False
True
False

GetConstructors()

Origem:
Type.cs
Origem:
Type.cs
Origem:
Type.cs
Origem:
Type.cs
Origem:
Type.cs

Retorna todos os construtores públicos definidos para o atual Type.

public:
 cli::array <System::Reflection::ConstructorInfo ^> ^ GetConstructors();
public:
 virtual cli::array <System::Reflection::ConstructorInfo ^> ^ GetConstructors();
[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicConstructors)]
public System.Reflection.ConstructorInfo[] GetConstructors();
public System.Reflection.ConstructorInfo[] GetConstructors();
[System.Runtime.InteropServices.ComVisible(true)]
public System.Reflection.ConstructorInfo[] GetConstructors();
[<System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicConstructors)>]
member this.GetConstructors : unit -> System.Reflection.ConstructorInfo[]
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()

Retornos

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

Implementações

Atributos

Comentários

No .NET 6 e versões anteriores, o GetConstructors método não retorna construtores em uma ordem específica, como a ordem de declaração. Seu código não deve depender da ordem na qual os construtores são retornados, pois essa ordem varia. No entanto, a partir do .NET 7, a ordenação é determinística com base na ordenação de metadados no assembly.

A tabela a seguir mostra quais membros de uma classe base são retornados pelos métodos Get ao refletir sobre um tipo.

Tipo de Membro Estático Não estático
Construtor No No
Campo No Sim. Um campo permanece sempre oculto por nome e assinatura.
Acontecimento Não aplicável A regra de sistema do tipo comum é que a herança é a mesma dos métodos que implementam a propriedade. A reflexão trata as propriedades como hide-by-name-and-signature. Veja a observação 2 abaixo.
Método No Sim. Um método (virtual e não virtual) pode permanecer oculto por nome ou por nome e assinatura.
Tipo aninhado No No
Propriedade Não aplicável A regra de sistema do tipo comum é que a herança é a mesma dos métodos que implementam a propriedade. A reflexão trata as propriedades como hide-by-name-and-signature. Veja a observação 2 abaixo.
  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. Essa é uma comparação binária.

  2. Para reflexão, propriedades e eventos permanecem ocultos por nome e assinatura. Se você tiver uma propriedade com um acessador get e um set na classe base, mas a classe derivada tiver apenas um acessador get, a propriedade de classe derivada ocultará a propriedade de classe base e você não poderá acessar o setter na classe base.

  3. Atributos personalizados não fazem parte do sistema de tipos comuns.

Essa sobrecarga de método chama a sobrecarga do GetConstructors(BindingFlags) método, com BindingFlags.PublicBindingFlags.Instance | (BindingFlags.PublicOrBindingFlags.Instance no Visual Basic). Ele não encontrará inicializadores de classe (construtor estático). Para localizar inicializadores de classe, use uma sobrecarga que usa BindingFlagse especifique | BindingFlags.NonPublicBindingFlags.Static(BindingFlags.StaticOrBindingFlags.NonPublic no Visual Basic). Você também pode obter o inicializador de classe usando a TypeInitializer propriedade.

Se a corrente 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. Por exemplo, se a classe C<T> tiver um construtor C(T t1) (Sub New(ByVal t1 As T) no Visual Basic), chamar GetConstructorsC<int> retornará um ConstructorInfo que representa C(int t1) em C# (Sub New(ByVal t1 As Integer) no Visual Basic).

Se a corrente Type representar um parâmetro de tipo genérico, o GetConstructors método retornará uma matriz vazia.

Confira também

Aplica-se a

GetConstructors(BindingFlags)

Origem:
Type.cs
Origem:
Type.cs
Origem:
Type.cs
Origem:
Type.cs
Origem:
Type.cs

Quando substituído em uma classe derivada, pesquisa os construtores definidos para o atual Type, usando o especificado BindingFlags.

public:
 abstract cli::array <System::Reflection::ConstructorInfo ^> ^ GetConstructors(System::Reflection::BindingFlags bindingAttr);
[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicConstructors)]
public abstract 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);
[<System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicConstructors)>]
abstract member GetConstructors : System.Reflection.BindingFlags -> System.Reflection.ConstructorInfo[]
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

Uma combinação bit a bit dos valores de enumeração que especificam como a pesquisa é conduzida.

- ou -

Default para retornar uma matriz vazia.

Retornos

Uma matriz de ConstructorInfo objetos que representa todos os construtores definidos para a corrente Type que correspondem às restrições de associação especificadas, incluindo o inicializador de tipo, se ele for definido. Retornará uma matriz vazia de tipo ConstructorInfo se nenhum construtor for definido para o atual Type, se nenhum dos construtores definidos corresponder às restrições de associação ou se o atual Type representar um parâmetro de tipo na definição de um tipo genérico ou método genérico.

Implementações

Atributos

Comentários

bindingAttr pode ser usado para especificar se deseja retornar apenas construtores públicos ou construtores públicos e não públicos.

Os seguintes BindingFlags sinalizadores de filtro podem ser usados para definir quais construtores incluir na pesquisa:

  • Especifique BindingFlags.Static junto com BindingFlags.NonPublic a recuperação do inicializador de classe (construtor estático). Você também pode obter o inicializador de classe usando a TypeInitializer propriedade.

  • Especifique BindingFlags.Instance junto com um ou ambos e BindingFlags.NonPublic para recuperar construtores de BindingFlags.Public instância.

Consulte System.Reflection.BindingFlags para obter mais informações.

No .NET 6 e versões anteriores, o GetConstructors método não retorna construtores em uma ordem específica, como a ordem de declaração. Seu código não deve depender da ordem na qual os construtores são retornados, pois essa ordem varia. No entanto, a partir do .NET 7, a ordenação é determinística com base na ordenação de metadados no assembly.

Se a corrente 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. Por exemplo, se a classe C<T> tiver um construtor C(T t1) (Sub New(ByVal t1 As T) no Visual Basic), chamar GetConstructorsC<int> retornará um ConstructorInfo que representa C(int t1) em C# (Sub New(ByVal t1 As Integer) no Visual Basic).

Se a corrente Type representar um parâmetro de tipo genérico, o GetConstructors método retornará uma matriz vazia.

Confira também

Aplica-se a