Type.GetProperties Método

Definição

Obtém as propriedades da corrente Type.

Sobrecargas

Name Description
GetProperties()

Devolve todas as propriedades públicas do atual Type.

GetProperties(BindingFlags)

Quando sobrescrito numa classe derivada, procura as propriedades da corrente Type, usando as restrições de ligação especificadas.

GetProperties()

Devolve todas as propriedades públicas do atual Type.

public:
 virtual cli::array <System::Reflection::PropertyInfo ^> ^ GetProperties();
public:
 cli::array <System::Reflection::PropertyInfo ^> ^ GetProperties();
public System.Reflection.PropertyInfo[] GetProperties();
abstract member GetProperties : unit -> System.Reflection.PropertyInfo[]
override this.GetProperties : unit -> System.Reflection.PropertyInfo[]
member this.GetProperties : unit -> System.Reflection.PropertyInfo[]
Public Function GetProperties () As PropertyInfo()

Devoluções

Um array de PropertyInfo objetos que representa todas as propriedades públicas do atual Type.

-ou-

Um array vazio do tipo PropertyInfo, se a corrente Type não tiver propriedades públicas.

Implementações

Exemplos

O exemplo a seguir demonstra o uso do GetProperties método.

PropertyInfo[] myPropertyInfo;
// Get the properties of 'Type' class object.
myPropertyInfo = Type.GetType("System.Type").GetProperties();
Console.WriteLine("Properties of System.Type are:");
for (int i = 0; i < myPropertyInfo.Length; i++)
{
    Console.WriteLine(myPropertyInfo[i].ToString());
}
// Get the properties of 'Type' class object.
let myPropertyInfo = Type.GetType("System.Type").GetProperties()
printfn "Properties of System.Type are:"
for pi in myPropertyInfo do
    printfn $"{pi}"
Dim myPropertyInfo() As PropertyInfo
' Get the properties of 'Type' class object.
myPropertyInfo = Type.GetType("System.Type").GetProperties()
Console.WriteLine("Properties of System.Type are:")
Dim i As Integer
For i = 0 To myPropertyInfo.Length - 1
   Console.WriteLine(myPropertyInfo(i).ToString())
Next i

Observações

Chamar esta sobrecarga equivale a chamar a sobrecarga GetProperties(BindingFlags) com um argumento bindingAttr igual a BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public em C# e BindingFlags.Instance Or BindingFlags.Static Or BindingFlags.Public em Visual Basic. Devolve todas as propriedades de instância pública e estáticas, tanto aquelas definidas pelo tipo representado pelo objeto atual Type como aquelas herdadas dos seus tipos base.

Um imóvel é considerado público para reflexão se tiver pelo menos um acessor que seja público. Caso contrário, a propriedade é considerada privada, e você deve usar BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static (no Visual Basic, combinar os valores usando Or) para obtê-la.

No .NET 6 e versões anteriores, o método GetProperties não devolve propriedades numa ordem específica, como ordem alfabética ou de declaração. O seu código não deve depender da ordem em que as propriedades são devolvidas, 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.
Event 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.

Se a corrente Type representa um tipo genérico construído, este método devolve os PropertyInfo objetos com os parâmetros de tipo substituídos pelos argumentos de tipo apropriados.

Se o current Type representa um parâmetro type na definição de um tipo genérico ou método genérico, esse método pesquisa as propriedades da restrição de classe.

Ver também

Aplica-se a

GetProperties(BindingFlags)

Quando sobrescrito numa classe derivada, procura as propriedades da corrente Type, usando as restrições de ligação especificadas.

public:
 abstract cli::array <System::Reflection::PropertyInfo ^> ^ GetProperties(System::Reflection::BindingFlags bindingAttr);
public abstract System.Reflection.PropertyInfo[] GetProperties(System.Reflection.BindingFlags bindingAttr);
abstract member GetProperties : System.Reflection.BindingFlags -> System.Reflection.PropertyInfo[]
Public MustOverride Function GetProperties (bindingAttr As BindingFlags) As PropertyInfo()

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 objetos que representa todas as propriedades da corrente Type que correspondem às restrições de ligação especificadas.

-ou-

Um array vazio do tipo PropertyInfo, se a corrente Type não tiver propriedades, ou se nenhuma das propriedades corresponder às restrições de ligação.

Implementações

Exemplos

O exemplo seguinte define uma classe chamada PropertyClass que inclui seis propriedades: duas são públicas, uma é privada, uma é protegida, uma é interna (Friend em Visual Basic) e uma é interna protegida (Protected Friend em Visual Basic). Depois, apresenta alguma informação básica de propriedades (o nome e tipo da propriedade, se é leitura/escrita, e a visibilidade dos seus get e set acessórios) para as propriedades que correspondem às restrições de ligação especificadas.

using System;
using System.Reflection;

// Create a class having six properties.
public class PropertyClass
{
    public String Property1
    {
        get { return "hello"; }
    }

    public String Property2
    {
        get { return "hello"; }
    }

    protected String Property3
    {
        get { return "hello"; }
    }

    private Int32 Property4
    {
        get { return 32; }
    }

    internal String Property5
    {
       get { return "value"; }
    }

    protected internal String Property6
    {
       get { return "value"; }
    }
}

public class Example
{
    public static void Main()
    {
        Type t = typeof(PropertyClass);
        // Get the public properties.
        PropertyInfo[] propInfos = t.GetProperties(BindingFlags.Public|BindingFlags.Instance);
        Console.WriteLine("The number of public properties: {0}.\n",
                          propInfos.Length);
        // Display the public properties.
        DisplayPropertyInfo(propInfos);

        // Get the nonpublic properties.
        PropertyInfo[] propInfos1 = t.GetProperties(BindingFlags.NonPublic|BindingFlags.Instance);
        Console.WriteLine("The number of non-public properties: {0}.\n",
                          propInfos1.Length);
        // Display all the nonpublic properties.
        DisplayPropertyInfo(propInfos1);
    }

    public static void DisplayPropertyInfo(PropertyInfo[] propInfos)
    {
        // Display information for all properties.
        foreach (var propInfo in propInfos) {
            bool readable = propInfo.CanRead;
            bool writable = propInfo.CanWrite;

            Console.WriteLine("   Property name: {0}", propInfo.Name);
            Console.WriteLine("   Property type: {0}", propInfo.PropertyType);
            Console.WriteLine("   Read-Write:    {0}", readable & writable);
            if (readable) {
               MethodInfo getAccessor = propInfo.GetMethod;
               Console.WriteLine("   Visibility:    {0}",
                                 GetVisibility(getAccessor));
            }
            if (writable) {
               MethodInfo setAccessor = propInfo.SetMethod;
               Console.WriteLine("   Visibility:    {0}",
                                 GetVisibility(setAccessor));
            }
            Console.WriteLine();
        }
    }

    public static String GetVisibility(MethodInfo accessor)
    {
       if (accessor.IsPublic)
          return "Public";
       else if (accessor.IsPrivate)
          return "Private";
       else if (accessor.IsFamily)
          return "Protected";
       else if (accessor.IsAssembly)
          return "Internal/Friend";
       else
          return "Protected Internal/Friend";
    }
}
// The example displays the following output:
//       The number of public properties: 2.
//
//          Property name: Property1
//          Property type: System.String
//          Read-Write:    False
//          Visibility:    Public
//
//          Property name: Property2
//          Property type: System.String
//          Read-Write:    False
//          Visibility:    Public
//
//       The number of non-public properties: 4.
//
//          Property name: Property3
//          Property type: System.String
//          Read-Write:    False
//          Visibility:    Protected
//
//          Property name: Property4
//          Property type: System.Int32
//          Read-Write:    False
//          Visibility:    Private
//
//          Property name: Property5
//          Property type: System.String
//          Read-Write:    False
//          Visibility:    Internal/Friend
//
//          Property name: Property6
//          Property type: System.String
//          Read-Write:    False
//          Visibility:    Protected Internal/Friend
open System.Reflection

// Create a class having four properties.
type PropertyClass() =
    member _.Property1 = 
        "hello"

    member _.Property2 = 
        "hello"

    member private _.Property3 = 
        32

    member internal _.Property4 =
       "value"

let getVisibility (accessor: MethodInfo) =
    if accessor.IsPublic then
        "Public"
    elif accessor.IsPrivate then
        "Private"
    elif accessor.IsFamily then
        "Protected"
    elif accessor.IsAssembly then
        "Internal/Friend"
    else
        "Protected Internal/Friend"

let displayPropertyInfo (propInfos: #seq<PropertyInfo>) = 
    // Display information for all properties.
    for propInfo in propInfos do
        let readable = propInfo.CanRead
        let writable = propInfo.CanWrite

        printfn $"   Property name: {propInfo.Name}"
        printfn $"   Property type: {propInfo.PropertyType}"
        printfn $"   Read-Write:    {readable && writable}"
        if readable then
            let getAccessor = propInfo.GetMethod
            printfn $"   Visibility:    {getVisibility getAccessor}"
        if writable then
            let setAccessor = propInfo.SetMethod
            printfn $"   Visibility:    {getVisibility setAccessor}"
        printfn ""

let t = typeof<PropertyClass>
// Get the public properties.
let propInfos = t.GetProperties(BindingFlags.Public ||| BindingFlags.Instance)
printfn $"The number of public properties: {propInfos.Length}.\n"
// Display the public properties.
displayPropertyInfo propInfos

// Get the nonpublic properties.
let propInfos1 = t.GetProperties(BindingFlags.NonPublic ||| BindingFlags.Instance)
printfn $"The number of non-public properties: {propInfos1.Length}.\n"
// Display all the nonpublic properties.
displayPropertyInfo propInfos1

// The example displays the following output:
//       The number of public properties: 2.
//
//          Property name: Property1
//          Property type: System.String
//          Read-Write:    False
//          Visibility:    Public
//
//          Property name: Property2
//          Property type: System.String
//          Read-Write:    False
//          Visibility:    Public
//
//       The number of non-public properties: 2.
//
//          Property name: Property3
//          Property type: System.Int32
//          Read-Write:    False
//          Visibility:    Private
//
//          Property name: Property4
//          Property type: System.String
//          Read-Write:    False
//          Visibility:    Internal/Friend
Imports System.Reflection

' Create a class having six properties.
Public Class PropertyClass
    Public ReadOnly Property Property1() As String
        Get
            Return "hello"
        End Get
    End Property

    Public ReadOnly Property Property2() As String
        Get
            Return "hello"
        End Get
    End Property

    Protected ReadOnly Property Property3() As String
        Get
            Return "hello"
        End Get
    End Property

    Private ReadOnly Property Property4 As Integer
        Get
           Return 32
        End Get
    End Property

    Friend ReadOnly Property Property5 As String
       Get
          Return "value"
       End Get
    End Property

    Protected Friend ReadOnly Property Property6 As String
       Get
          Return "value"
       End Get
    End Property
End Class

Public Module Example
    Public Sub Main()
        Dim t As Type = GetType(PropertyClass)
        ' Get the public properties.
        Dim propInfos As PropertyInfo() = t.GetProperties(BindingFlags.Public Or BindingFlags.Instance)
        Console.WriteLine("The number of public properties: {0}",
                          propInfos.Length)
        Console.WriteLine()
        ' Display the public properties.
        DisplayPropertyInfo(propInfos)

        ' Get the non-public properties.
        Dim propInfos1 As PropertyInfo() = t.GetProperties(BindingFlags.NonPublic Or BindingFlags.Instance)
        Console.WriteLine("The number of non-public properties: {0}",
                          propInfos1.Length)
        Console.WriteLine()
        ' Display all the non-public properties.
        DisplayPropertyInfo(propInfos1)
    End Sub

    Public Sub DisplayPropertyInfo(ByVal propInfos() As PropertyInfo)
        ' Display information for all properties.
        For Each propInfo In propInfos
            Dim readable As Boolean = propInfo.CanRead
            Dim writable As Boolean = propInfo.CanWrite
            
            Console.WriteLine("   Property name: {0}", propInfo.Name)
            Console.WriteLine("   Property type: {0}", propInfo.PropertyType)
            Console.WriteLine("   Read-Write:    {0}", readable And writable)
            If readable Then
               Dim getAccessor As MethodInfo = propInfo.GetMethod
               Console.WriteLine("   Visibility:    {0}",
                                 GetVisibility(getAccessor))
            End If
            If writable Then
               Dim setAccessor As MethodInfo = propInfo.SetMethod
               Console.WriteLine("   Visibility:    {0}",
                                 GetVisibility(setAccessor))
            End If
            Console.WriteLine()
        Next
    End Sub
    
    Public Function GetVisibility(accessor As MethodInfo) As String
       If accessor.IsPublic Then
          Return "Public"
       ElseIf accessor.IsPrivate Then
          Return "Private"
       Else If accessor.IsFamily Then
          Return "Protected"
       Else If accessor.IsAssembly Then
          Return "Internal/Friend"
       Else
          Return "Protected Internal/Friend"
       End If
    End Function
End Module
' The example displays the following output:
'       The number of public properties: 2
'
'          Property name: Property1
'          Property type: System.String
'          Read-Write:    False
'          Visibility:    Public
'
'          Property name: Property2
'          Property type: System.String
'          Read-Write:    False
'          Visibility:    Public
'
'       The number of non-public properties: 4
'
'          Property name: Property3
'          Property type: System.String
'          Read-Write:    False
'          Visibility:    Protected
'
'          Property name: Property4
'          Property type: System.Int32
'          Read-Write:    False
'          Visibility:    Private
'
'          Property name: Property5
'          Property type: System.String
'          Read-Write:    False
'          Visibility:    Internal/Friend
'
'          Property name: Property6
'          Property type: System.String
'          Read-Write:    False
'          Visibility:    Protected Internal/Friend

Observações

Para que a GetProperties(BindingFlags) sobrecarga recupere com sucesso informação de propriedades, o bindingAttr argumento deve incluir pelo menos um de BindingFlags.Instance e BindingFlags.Static, juntamente com pelo menos um de BindingFlags.NonPublic e BindingFlags.Public.

Os seguintes BindingFlags sinalizadores de filtro podem ser usados para definir quais propriedades devem ser incluídas na pesquisa:

  • Especifique BindingFlags.Instance incluir métodos de instância.

  • Especifique BindingFlags.Static a inclusão de métodos estáticos.

  • Especifique BindingFlags.Public para incluir propriedades públicas na pesquisa. Um imóvel é considerado público para reflexão se tiver pelo menos um acessor que seja público.

  • Especifique BindingFlags.NonPublic para incluir propriedades não públicas (ou seja, propriedades privadas, internas e protegidas) na pesquisa. Apenas as propriedades protegidas e internas nas classes base são devolvidas; Propriedades privadas nas classes base não são devolvidas.

  • Especifique BindingFlags.FlattenHierarchy para incluir public e protected membros estáticos na hierarquia; private membros estáticos em classes herdadas não são incluídos.

  • Especifique BindingFlags.Default sozinho para devolver um array vazio PropertyInfo .

Os seguintes BindingFlags sinalizadores modificadores podem ser usados para alterar o funcionamento da pesquisa:

  • BindingFlags.DeclaredOnly para pesquisar apenas as propriedades declaradas no Type, e não nas propriedades simplesmente herdadas.

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

No .NET 6 e versões anteriores, o método GetProperties não devolve propriedades numa ordem específica, como ordem alfabética ou de declaração. O seu código não deve depender da ordem em que as propriedades são devolvidas, 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 PropertyInfo objetos com os parâmetros de tipo substituídos pelos argumentos de tipo apropriados.

Se o current Type representa um parâmetro type na definição de um tipo genérico ou método genérico, esse método pesquisa as propriedades da restrição de classe.

Ver também

Aplica-se a