Type.GetConstructors Método

Definição

Obtém os construtores da corrente Type.

Sobrecargas

Name Description
GetConstructors()

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

GetConstructors(BindingFlags)

Quando sobrescrito numa classe derivada, procura os construtores definidos para a corrente 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 deste código é:

2
False
False

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

Para encontrar construtores estáticos, use o GetConstructors overload e passe a combinação (OR lógico) de BindingFlags.Public, BindingFlags.Static, BindingFlags.NonPublic, BindingFlags.Instance, conforme mostrado no seguinte exemplo de código:

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

Devolve 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()

Devoluções

Um array de ConstructorInfo objetos que representa todos os construtores de instância pública definidos para o atual Type, mas sem incluir o inicializador de tipo (construtor estático). Se não forem definidos construtores de instância pública para a corrente Type, ou se a corrente Type representar um parâmetro de tipo na definição de um tipo genérico ou método genérico, é devolvida uma matriz vazia de tipo ConstructorInfo .

Implementações

Atributos

Observações

Em versões .NET 6 e anteriores, o método GetConstructors não devolve construtores numa ordem particular, como a ordem de declaração. O seu código não deve depender da ordem em que os construtores são devolvidos, porque essa ordem varia. No entanto, a partir do .NET 7, a ordenação é determinística com base na ordenação dos metadados na assembleia.

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

Tipo de Membro Estático Não-estático
Construtor No No
Campo No Yes. Um campo é sempre ocultado com base no nome e assinatura.
Evento Não aplicável A regra comum do sistema de tipos é que a herança é a mesma dos métodos que implementam a propriedade. A reflexão trata propriedades como esconder pelo nome e assinatura. Veja a nota 2 abaixo.
Método No Yes. Um método (virtual e não virtual) pode ser ocultado por nome ou ocultado por nome e assinatura.
Tipo aninhado No No
Property Não aplicável A regra comum do sistema de tipos é que a herança é a mesma dos métodos que implementam a propriedade. A reflexão trata propriedades como esconder pelo nome e assinatura. Veja a nota 2 abaixo.
  1. Ocultar por nome e assinatura considera todas as partes da assinatura, incluindo modificadores personalizados, tipos de retorno, tipos de parâmetros, sentinelas e convenções de chamada não gerenciadas. Esta é uma comparação binária.

  2. Para reflexão, as propriedades e os eventos são ocultados 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 acessor get, a propriedade de classe derivada ocultará a propriedade de classe base e você não poderá acessar o setter na classe base.

  3. Os atributos personalizados não fazem parte do sistema de tipo comum.

Este método overload chama o método GetConstructors(BindingFlags) overload, com BindingFlags.Public | BindingFlags.Instance (BindingFlags.PublicOrBindingFlags.Instance em Visual Basic). Não encontra inicializadores de classe (construtor estático). Para encontrar inicializadores de classe, use uma sobrecarga que use BindingFlags e especifique BindingFlags.Static | BindingFlags.NonPublic (BindingFlags.StaticOrBindingFlags.NonPublic em Visual Basic). Também pode obter o inicializador de classes usando a TypeInitializer propriedade.

Se a corrente Type representa um tipo genérico construído, este método devolve 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) em Visual Basic), chamar GetConstructors em C<int> retorna um ConstructorInfo que representa C(int t1) em C# (Sub New(ByVal t1 As Integer) em Visual Basic).

Se a corrente Type representa um parâmetro genérico de tipo, o GetConstructors método devolve um array vazio.

Ver também

Aplica-se a

GetConstructors(BindingFlags)

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

Quando sobrescrito numa classe derivada, procura os construtores definidos para a corrente 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 especifica como a pesquisa é realizada.

-ou-

Default para devolver um array vazio.

Devoluções

Um array de ConstructorInfo objetos que representa todos os construtores definidos para a corrente Type que correspondem às restrições de ligação especificadas, incluindo o inicializador de tipo se estiver definido. Devolve um array vazio de tipo ConstructorInfo se não estiverem definidos construtores para a corrente Type, se nenhum dos construtores definidos corresponder às restrições de ligação, ou se a corrente Type representar um parâmetro de tipo na definição de um tipo genérico ou método genérico.

Implementações

Atributos

Observações

bindingAttr pode ser usado para especificar se deve-se devolver apenas construtores públicos ou ambos os construtores públicos e não públicos.

As seguintes BindingFlags bandeiras de filtro podem ser usadas para definir quais os construtores a incluir na pesquisa:

  • Especifique BindingFlags.Static juntamente com BindingFlags.NonPublic para recuperar o inicializador de classe (construtor estático). Também pode obter o inicializador de classes usando a TypeInitializer propriedade.

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

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

Em versões .NET 6 e anteriores, o método GetConstructors não devolve construtores numa ordem particular, como a ordem de declaração. O seu código não deve depender da ordem em que os construtores são devolvidos, porque essa ordem varia. No entanto, a partir do .NET 7, a ordenação é determinística com base na ordenação dos metadados na assembleia.

Se a corrente Type representa um tipo genérico construído, este método devolve 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) em Visual Basic), chamar GetConstructors em C<int> retorna um ConstructorInfo que representa C(int t1) em C# (Sub New(ByVal t1 As Integer) em Visual Basic).

Se a corrente Type representa um parâmetro genérico de tipo, o GetConstructors método devolve um array vazio.

Ver também

Aplica-se a