Exportar (0) Imprimir
Expandir Tudo
Este artigo foi traduzido por máquina. Coloque o ponteiro do mouse sobre as frases do artigo para ver o texto original. Mais informações.
Tradução
Original

Método Type.GetConstructors

Retorna todos os construtores públicos definidos para Typeatual.

Namespace:  System
Assembly:  mscorlib (em mscorlib.dll)

[ComVisibleAttribute(true)]
public ConstructorInfo[] GetConstructors()

Valor de retorno

Tipo: System.Reflection.ConstructorInfo[]
Uma matriz de objetos ConstructorInfo que representam todos os construtores públicos da instância definida para Typeatual, mas não incluindo o inicializador (construtor de tipo estático). Se nenhum construtor público da instância está definido para Typeatual, ou se Type atual representa um parâmetro de tipo na definição de um tipo genérico ou de um método genérico, uma matriz vazia do tipo ConstructorInfo será retornada.

Implementações

_Type.GetConstructors()

O método de GetConstructors não retorna construtores em uma ordem específica, como a ordem da declaração. Seu código não deve depender da ordem em que os construtores são retornados, porque essa ordem varia.

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

Static

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.

  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. Esta é 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 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.

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

Essa sobrecarga do método chama a sobrecarga do método de GetConstructors(BindingFlags) , com BindingFlags.Public | BindingFlags.Instance (BindingFlags.PublicOrBindingFlags.Instance no Visual Basic). Não localizará os inicializadores da classe .cctor (). Para localizar inicializadores da classe, use uma sobrecarga que usa BindingFlags, e especifique BindingFlags.Static | BindingFlags.NonPublic (BindingFlags.StaticOrBindingFlags.NonPublic no Visual Basic). Também é possível obter o inicializador da classe usando-se a propriedade TypeInitializer.

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

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

Este exemplo mostra a saída da sobrecarga de GetConstructors de uma classe que tem dois construtores da 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);
        }
    }
}


A saída desse código é:

2

False

False

Como a sobrecarga de GetConstructors() usa apenas BindingFlags.Public e BindingFlags.Instance, o construtor estático ou é contado pela expressão de for ou avaliado por IsStatic.

Para localizar construtores estáticos, use a sobrecarga de GetConstructors(BindingFlags) , e passar a combinação ( ORlógico) de BindingFlags.Public, BindingFlags.Static, BindingFlags.NonPublic, BindingFlags.Instance, conforme mostrado no 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);
        }
    }
}


Agora a saída são:

3

False

True

False

.NET Framework

Com suporte em: 4.5.2, 4.5.1, 4.5, 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Com suporte em: 4, 3.5 SP1

Biblioteca de Classes Portátil

Com suporte em: Biblioteca de Classes Portátil

.NET para aplicativos do Windows Phone

Com suporte em: Windows Phone 8, Silverlight 8.1

Windows Phone 8.1, Windows Phone 8, Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (Função Server Core sem suporte), Windows Server 2008 R2 (Função Server Core com suporte com o SP1 ou posterior, Itanium sem suporte)

O .NET Framework não oferece suporte a todas as versões de cada plataforma. Para obter uma lista das versões com suporte, consulte Requisitos do sistema do .NET Framework.

Contribuições da comunidade

ADICIONAR
A Microsoft está realizando uma pesquisa online para saber sua opinião sobre o site do MSDN. Se você optar por participar, a pesquisa online lhe será apresentada quando você sair do site do MSDN.

Deseja participar?
Mostrar:
© 2015 Microsoft