Type.GetConstructors Método
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
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 |
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. |
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.
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.
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
- ConstructorInfo
- GetConstructor(BindingFlags, Binder, CallingConventions, Type[], ParameterModifier[])
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.Staticjuntamente comBindingFlags.NonPublicpara recuperar o inicializador de classe (construtor estático). Também pode obter o inicializador de classes usando a TypeInitializer propriedade.Especifique
BindingFlags.Instancejuntamente com um ou ambos eBindingFlags.PublicBindingFlags.NonPublicpara 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
- ConstructorInfo
- BindingFlags
- DefaultBinder
- GetConstructor(BindingFlags, Binder, CallingConventions, Type[], ParameterModifier[])