Type.GetConstructors Método
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Obtém os construtores do Type atual.
Sobrecargas
GetConstructors() |
Retorna todos os construtores públicos definidos para o Type atual. |
GetConstructors(BindingFlags) |
Quando substituído em uma classe derivada, pesquisa os construtores definidos para o Type atual usando os |
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 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);
}
}
}
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 Instance, o 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ógico) de BindingFlags.Public, BindingFlags.Static, BindingFlags.NonPublic, BindingFlags.Instance, conforme mostrado no exemplo de código a seguir:
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);
}
}
}
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
Retorna todos os construtores públicos definidos para o Type atual.
public:
cli::array <System::Reflection::ConstructorInfo ^> ^ GetConstructors();
public:
virtual cli::array <System::Reflection::ConstructorInfo ^> ^ GetConstructors();
public System.Reflection.ConstructorInfo[] GetConstructors ();
[System.Runtime.InteropServices.ComVisible(true)]
public System.Reflection.ConstructorInfo[] GetConstructors ();
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 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). 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.
Implementações
- Atributos
Comentários
No .NET 6 e em 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 em que 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
durante a reflexão em um tipo.
Tipo do membro | Estático | Não estático |
---|---|---|
Construtor | Não | Não |
Campo | Não | Sim. Um campo permanece sempre oculto por nome e assinatura. |
Evento | Não aplicável | A regra de sistema do tipo comum é que a herança é a mesma dos métodos que implementam a propriedade. Reflexão trata propriedades como ocultas por nome e assinatura. Consulte a observação 2 abaixo. |
Método | Não | Sim. Um método (virtual e não virtual) pode permanecer oculto por nome ou por nome e assinatura. |
Tipo aninhado | Não | Não |
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. Reflexão trata propriedades como ocultas por nome e assinatura. Consulte a observação 2 abaixo. |
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. Esta é uma comparação binária.
Para reflexão, propriedades e eventos permanecem ocultos por nome e assinatura. 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.
Atributos personalizados não fazem parte do sistema de tipo comum.
Essa sobrecarga de método chama a sobrecarga do GetConstructors(BindingFlags) método, com BindingFlags.PublicBindingFlags.Instance | (BindingFlags.PublicOr
BindingFlags.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.StaticOr
BindingFlags.NonPublic no Visual Basic). Também é possível obter o inicializador da classe usando-se a propriedade TypeInitializer.
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. Por exemplo, se a classe C<T>
tiver um construtor C(T t1)
(Sub New(ByVal t1 As T)
no Visual Basic), chamar GetConstructors em C<int>
retornará um ConstructorInfo que representa C(int t1)
em C# (Sub New(ByVal t1 As Integer)
no Visual Basic).
Se o atual Type representar um parâmetro de tipo genérico, o GetConstructors método retornará uma matriz vazia.
Confira também
- ConstructorInfo
- GetConstructor(BindingFlags, Binder, CallingConventions, Type[], ParameterModifier[])
Aplica-se a
GetConstructors(BindingFlags)
- Origem:
- Type.cs
- Origem:
- Type.cs
- Origem:
- Type.cs
Quando substituído em uma classe derivada, pesquisa os construtores definidos para o Type atual usando os BindingFlags
especificados.
public:
abstract cli::array <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);
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 é realizada.
- ou -
Default para retornar uma matriz vazia.
Retornos
Uma matriz de ConstructorInfo objetos que representam todos os construtores definidos para o atual Type que correspondem às restrições de associação especificadas, incluindo o inicializador de tipo, se ele estiver definido. 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.
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 sinalizadores de filtro BindingFlags podem ser usados para definir quais construtores devem ser incluídos na pesquisa:
Especifique
BindingFlags.Static
junto comBindingFlags.NonPublic
para recuperar o inicializador de classe (construtor estático). Também é possível obter o inicializador da classe usando-se a propriedade TypeInitializer.Especifique
BindingFlags.Instance
junto com um ou ambos eBindingFlags.Public
BindingFlags.NonPublic
para recuperar construtores de instância.
Consulte System.Reflection.BindingFlags para obter mais informações.
No .NET 6 e em 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 em que 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 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. Por exemplo, se a classe C<T>
tiver um construtor C(T t1)
(Sub New(ByVal t1 As T)
no Visual Basic), chamar GetConstructors em C<int>
retornará um ConstructorInfo que representa C(int t1)
em C# (Sub New(ByVal t1 As Integer)
no Visual Basic).
Se o atual Type representar um parâmetro de tipo genérico, o GetConstructors método retornará uma matriz vazia.
Confira também
- ConstructorInfo
- BindingFlags
- DefaultBinder
- GetConstructor(BindingFlags, Binder, CallingConventions, Type[], ParameterModifier[])