Compartilhar via


PropertyInfo.GetValue Método

Definição

Retorna o valor da propriedade de um objeto especificado.

Sobrecargas

GetValue(Object)

Retorna o valor da propriedade de um objeto especificado.

GetValue(Object, Object[])

Retorna o valor da propriedade de um objeto especificado com os valores de índice opcionais de propriedades indexadas.

GetValue(Object, BindingFlags, Binder, Object[], CultureInfo)

Quando é substituído em uma classe derivada, retorna o valor da propriedade de um objeto especificado que tem as informações específicas da cultura, índice e associação especificadas.

GetValue(Object)

Origem:
PropertyInfo.cs
Origem:
PropertyInfo.cs
Origem:
PropertyInfo.cs

Retorna o valor da propriedade de um objeto especificado.

public:
 System::Object ^ GetValue(System::Object ^ obj);
public object GetValue (object obj);
public object? GetValue (object? obj);
member this.GetValue : obj -> obj
Public Function GetValue (obj As Object) As Object

Parâmetros

obj
Object

O objeto cujo valor da propriedade será retornado.

Retornos

O valor da propriedade do objeto especificado.

Exemplos

O exemplo a seguir define uma Planet classe que tem duas propriedades: Name, o nome do planeta; e Distance, a distância do planeta da Terra. O exemplo cria uma instância de um Planet objeto que representa o planeta Júpiter e o passa para um GetPropertyValues método que exibe informações sobre as propriedades e usa o GetValue método para obter o valor de cada Planet propriedade.

using System;
using System.Reflection;

public class Planet
{
   private String planetName;
   private Double distanceFromEarth;
   
   public Planet(String name, Double distance)
   {
      planetName = name;
      distanceFromEarth = distance;
   } 

   public String Name
   { get { return planetName; } }
   
   public Double Distance 
   { get { return distanceFromEarth; }
     set { distanceFromEarth = value; } }
}

public class Example
{
   public static void Main()
   {
      Planet jupiter = new Planet("Jupiter", 3.65e08);
      GetPropertyValues(jupiter);
   }
   
   private static void GetPropertyValues(Object obj)
   {
      Type t = obj.GetType();
      Console.WriteLine("Type is: {0}", t.Name);
      PropertyInfo[] props = t.GetProperties();
      Console.WriteLine("Properties (N = {0}):", 
                        props.Length);
      foreach (var prop in props)
         if (prop.GetIndexParameters().Length == 0)
            Console.WriteLine("   {0} ({1}): {2}", prop.Name,
                              prop.PropertyType.Name,
                              prop.GetValue(obj));
         else
            Console.WriteLine("   {0} ({1}): <Indexed>", prop.Name,
                              prop.PropertyType.Name);
   }
}
// The example displays the following output:
//       Type is: Planet
//       Properties (N = 2):
//          Name (String): Jupiter
//          Distance (Double): 365000000
Imports System.Reflection

Public Class Planet
   Private planetName As String
   Private distanceFromEarth As Double
   
   Public Sub New(name As String, distance As Double)
      planetName = name
      distanceFromEarth = distance
   End Sub 

   Public ReadOnly Property Name As String
      Get
         Return planetName
      End Get
   End Property
   
   Public Property Distance As Double
      Get
         Return distanceFromEarth
      End Get
      Set
         distanceFromEarth = value
      End Set
   End Property
End Class

Module Example
   Public Sub Main()
      Dim jupiter As New Planet("Jupiter", 3.65e08)
      GetPropertyValues(jupiter)
   End Sub
   
   Private Sub GetPropertyValues(obj As Object)
      Dim t As Type = obj.GetType()
      Console.WriteLine("Type is: {0}", t.Name)
      Dim props() As PropertyInfo = t.GetProperties()
      Console.WriteLine("Properties (N = {0}):", 
                        props.Length)
      For Each prop In props
         If prop.GetIndexParameters().Length = 0 Then
            Console.WriteLine("   {0} ({1}): {2}", prop.Name,
                              prop.PropertyType.Name,
                              prop.GetValue(obj))
         Else
            Console.WriteLine("   {0} ({1}): <Indexed>", prop.Name,
                              prop.PropertyType.Name)
         End If                  
      Next                         
   End Sub
End Module
' The example displays the following output:
'       Type is: Planet
'       Properties (N = 2):
'          Name (String): Jupiter
'          Distance (Double): 365000000

Comentários

Você chama a GetValue(Object) sobrecarga para recuperar o valor de uma propriedade não indexada; se você tentar recuperar o valor de uma propriedade indexada, o método gerará uma TargetParameterCountException exceção. Você pode determinar se uma propriedade é indexada ou não chamando o GetIndexParameters método . Se o comprimento da matriz retornada ParameterInfo for zero, a propriedade não será indexada.

Esse é um método de conveniência que fornece uma implementação para o método abstrato GetValue(Object, BindingFlags, Binder, Object[], CultureInfo) com o BindingFlags parâmetro definido BindingFlags.Defaultcomo , o Binder definido nullcomo , a matriz de objetos de valores de índice definidos nullcomo e o CultureInfo definido como null.

Aplica-se a

GetValue(Object, Object[])

Origem:
PropertyInfo.cs
Origem:
PropertyInfo.cs
Origem:
PropertyInfo.cs

Retorna o valor da propriedade de um objeto especificado com os valores de índice opcionais de propriedades indexadas.

public:
 virtual System::Object ^ GetValue(System::Object ^ obj, cli::array <System::Object ^> ^ index);
public virtual object GetValue (object obj, object[] index);
public virtual object? GetValue (object? obj, object?[]? index);
abstract member GetValue : obj * obj[] -> obj
override this.GetValue : obj * obj[] -> obj
Public Overridable Function GetValue (obj As Object, index As Object()) As Object

Parâmetros

obj
Object

O objeto cujo valor da propriedade será retornado.

index
Object[]

Valores de índice opcionais para propriedades indexadas. Os índices de propriedades indexadas são baseados em zero. Esse valor deve ser null para propriedades não indexadas.

Retornos

O valor da propriedade do objeto especificado.

Implementações

Exceções

A matriz index não contém o tipo de argumentos necessários.

- ou -

O acessador get da propriedade não foi encontrado.

O objeto não corresponde ao tipo de destino ou uma propriedade é uma propriedade de instância, mas obj é null.

Observação: no .NET para aplicativos da Windows Store ou na Biblioteca de Classes Portátil, capture Exception em vez disso.

O número de parâmetros em index não corresponde ao número de parâmetros usados pela propriedade indexada.

Houve uma tentativa inválida de acessar um método privado ou protegido em uma classe.

Observação: no .NET para aplicativos da Windows Store ou na Biblioteca de Classes Portátil, capture a exceção de classe base, MemberAccessException, em vez disso.

Erro ao recuperar o valor da propriedade. Por exemplo, um valor de índice especificado para uma propriedade indexada está fora do intervalo. A propriedade InnerException indica o motivo do erro.

Exemplos

O exemplo a seguir mostra como obter o valor de uma propriedade indexada. A String.Chars[] propriedade é a propriedade padrão (o indexador em C#) da String classe .

using System;
using System.Reflection;

class Example
{
    public static void Main()
    {
        string test = "abcdefghijklmnopqrstuvwxyz";

        // Get a PropertyInfo object representing the Chars property.
        PropertyInfo pinfo = typeof(string).GetProperty("Chars");

        // Show the first, seventh, and last letters
        ShowIndividualCharacters(pinfo, test, 0, 6, test.Length - 1);

        // Show the complete string.
        Console.Write("The entire string: ");
        for (int x = 0; x < test.Length; x++)
        {
            Console.Write(pinfo.GetValue(test, new Object[] {x}));
        }
        Console.WriteLine();
    }

    static void ShowIndividualCharacters(PropertyInfo pinfo, 
                                         object value,
                                         params int[] indexes)
    {
       foreach (var index in indexes) 
          Console.WriteLine("Character in position {0,2}: '{1}'",
                            index, pinfo.GetValue(value, new object[] { index }));
       Console.WriteLine();                          
    }                                      
}
// The example displays the following output:
//    Character in position  0: 'a'
//    Character in position  6: 'g'
//    Character in position 25: 'z'
//    
//    The entire string: abcdefghijklmnopqrstuvwxyz
Imports System.Reflection

Module Example
    Sub Main()
        Dim test As String = "abcdefghijklmnopqrstuvwxyz"

        ' Get a PropertyInfo object representing the Chars property.
        Dim pinfo As PropertyInfo = GetType(String).GetProperty("Chars")

        ' Show the first, seventh, and last characters.
        ShowIndividualCharacters(pinfo, test, { 0, 6, test.Length - 1 })

        ' Show the complete string.
        Console.Write("The entire string: ")
        For x As Integer = 0 To test.Length - 1
            Console.Write(pinfo.GetValue(test, { x }))
        Next
        Console.WriteLine()
    End Sub

    Sub ShowIndividualCharacters(pinfo As PropertyInfo, 
                                 value As Object, 
                                 ParamArray indexes() As Integer)
       For Each index In indexes 
          Console.WriteLine("Character in position {0,2}: '{1}'",
                            index, pinfo.GetValue(value, { index }))
       Next
       Console.WriteLine()                          
    End Sub   
End Module
' The example displays the following output:
'       Character in position  0: 'a'
'       Character in position  6: 'g'
'       Character in position 25: 'z'
'       
'       The entire string: abcdefghijklmnopqrstuvwxyz

Comentários

Para determinar se uma propriedade é indexada, use o GetIndexParameters método . Se a matriz resultante tiver 0 (zero) elementos, a propriedade não será indexada.

Esse é um método de conveniência que fornece uma implementação para o método abstrato GetValue com um BindingFlags parâmetro de Default, o Binder definido como nulle o CultureInfo definido como null.

Como as propriedades estáticas pertencem ao tipo, não a objetos individuais, obtenha propriedades estáticas passando null como o argumento do objeto. Por exemplo, use o seguinte código para obter a propriedade estática CurrentCulture de CultureInfo :

PropertyInfo CurCultProp =
    (typeof(CultureInfo)).GetProperty("CurrentCulture");
Console.WriteLine("CurrCult: " +
    CurCultProp.GetValue(null,null));

Para usar o GetValue método , primeiro obtenha a classe Type. TypeNo , obtenha o PropertyInfo. PropertyInfoNo , use o GetValue método .

Observação

A partir do .NET Framework 2.0, esse método poderá ser usado para acessar membros não públicos se o chamador tiver sido concedido ReflectionPermission com o ReflectionPermissionFlag.RestrictedMemberAccess sinalizador e se o conjunto de concessões dos membros não públicos estiver restrito ao conjunto de concessões do chamador ou a um subconjunto dele. (Consulte Considerações de segurança para reflexão.) Para usar essa funcionalidade, seu aplicativo deve ter como destino o .NET Framework 3.5 ou posterior.

Aplica-se a

GetValue(Object, BindingFlags, Binder, Object[], CultureInfo)

Origem:
PropertyInfo.cs
Origem:
PropertyInfo.cs
Origem:
PropertyInfo.cs

Quando é substituído em uma classe derivada, retorna o valor da propriedade de um objeto especificado que tem as informações específicas da cultura, índice e associação especificadas.

public:
 abstract System::Object ^ GetValue(System::Object ^ obj, System::Reflection::BindingFlags invokeAttr, System::Reflection::Binder ^ binder, cli::array <System::Object ^> ^ index, System::Globalization::CultureInfo ^ culture);
public abstract object? GetValue (object? obj, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder? binder, object?[]? index, System.Globalization.CultureInfo? culture);
public abstract object GetValue (object obj, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, object[] index, System.Globalization.CultureInfo culture);
abstract member GetValue : obj * System.Reflection.BindingFlags * System.Reflection.Binder * obj[] * System.Globalization.CultureInfo -> obj
Public MustOverride Function GetValue (obj As Object, invokeAttr As BindingFlags, binder As Binder, index As Object(), culture As CultureInfo) As Object

Parâmetros

obj
Object

O objeto cujo valor da propriedade será retornado.

invokeAttr
BindingFlags

Uma combinação bit a bit dos seguintes membros de enumeração que especifica o atributo de invocação: InvokeMethod, CreateInstance, Static, GetField, SetField, GetProperty e SetProperty. É necessário especificar um atributo de invocação adequado. Por exemplo, para invocar um membro estático, defina o sinalizador Static.

binder
Binder

Um objeto que permite a associação, a coerção de tipos de argumento, a invocação de membros e a recuperação de objetos MemberInfo por meio da reflexão. Caso binder seja null, o associador padrão é usado.

index
Object[]

Valores de índice opcionais para propriedades indexadas. Esse valor deve ser null para propriedades não indexadas.

culture
CultureInfo

A cultura para a qual o recurso deve ser localizado. Se o recurso não estiver localizado para essa cultura, a propriedade Parent será chamada sucessivamente em busca de uma correspondência. Se esse valor for null, as informações específicas da cultura serão obtidas da propriedade CurrentUICulture.

Retornos

O valor da propriedade do objeto especificado.

Implementações

Exceções

A matriz index não contém o tipo de argumentos necessários.

- ou -

O acessador get da propriedade não foi encontrado.

O objeto não corresponde ao tipo de destino ou uma propriedade é uma propriedade de instância, mas obj é null.

O número de parâmetros em index não corresponde ao número de parâmetros usados pela propriedade indexada.

Houve uma tentativa inválida de acessar um método privado ou protegido em uma classe.

Erro ao recuperar o valor da propriedade. Por exemplo, um valor de índice especificado para uma propriedade indexada está fora do intervalo. A propriedade InnerException indica o motivo do erro.

Comentários

Para determinar se uma propriedade é indexada, use o GetIndexParameters método . Se a matriz resultante tiver 0 (zero) elementos, a propriedade não será indexada.

Como as propriedades estáticas pertencem ao tipo, não a objetos individuais, obtenha propriedades estáticas passando null como o argumento do objeto. Por exemplo, use o seguinte código para obter a propriedade estática CurrentCulture de CultureInfo :

PropertyInfo CurCultProp =
       (typeof(CultureInfo)).GetProperty("CurrentCulture");
Console.WriteLine("CurrCult: " +
       CurCultProp.GetValue(null,null));

Para usar o GetValue método , primeiro obtenha a classe Type. TypeNo , obtenha o PropertyInfo. PropertyInfoNo , use o GetValue método .

Observação

A partir do .NET Framework 2.0, esse método poderá ser usado para acessar membros não públicos se o chamador tiver sido concedido ReflectionPermission com o ReflectionPermissionFlag.RestrictedMemberAccess sinalizador e se o conjunto de concessões dos membros não públicos estiver restrito ao conjunto de concessões do chamador ou a um subconjunto dele. (Consulte Considerações de segurança para reflexão.) Para usar essa funcionalidade, seu aplicativo deve ter como destino o .NET Framework 3.5 ou posterior.

Confira também

Aplica-se a