PropertyInfo.GetValue Método

Definição

Retorna o valor da propriedade de um objeto especificado.Returns the property value of a specified object.

Sobrecargas

GetValue(Object)

Retorna o valor da propriedade de um objeto especificado.Returns the property value of a specified object.

GetValue(Object, Object[])

Retorna o valor da propriedade de um objeto especificado com os valores de índice opcionais de propriedades indexadas.Returns the property value of a specified object with optional index values for indexed properties.

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.When overridden in a derived class, returns the property value of a specified object that has the specified binding, index, and culture-specific information.

GetValue(Object)

Retorna o valor da propriedade de um objeto especificado.Returns the property value of a specified object.

public:
 System::Object ^ GetValue(System::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.The object whose property value will be returned.

Retornos

O valor da propriedade do objeto especificado.The property value of the specified object.

Exemplos

O exemplo a seguir define Planet uma classe que tem duas propriedades Name:, o nome do planeta; e Distancea distância do planeta da terra.The following example defines a Planet class that has two properties: Name, the name of the planet; and Distance, the planet's distance from Earth. O exemplo cria uma instância Planet de um objeto que representa o planeta Júpiter e o passa GetPropertyValues para um método que exibe informações sobre as propriedades e GetValue usa o método para obter o valor Planet de cada propriedade.The example instantiates a Planet object that represents the planet Jupiter and passes it to a GetPropertyValues method that displays information about the properties and uses the GetValue method to get the value of each Planet property.

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 lançará TargetParameterCountException uma exceção.You call the GetValue(Object) overload to retrieve the value of a non-indexed property; if you try to retrieve the value of an indexed property, the method throws a TargetParameterCountException exception. Você pode determinar se uma propriedade é indexada ou não chamando o GetIndexParameters método.You can determine whether a property is indexed or not by calling the GetIndexParameters method. Se o comprimento da matriz retornada ParameterInfo for zero, a propriedade não será indexada.If the length of the returned ParameterInfo array is zero, the property is not indexed.

Esse é um método de conveniência que fornece uma implementação para o GetValue(Object, BindingFlags, Binder, Object[], CultureInfo) método abstract com BindingFlags o parâmetro definido BindingFlags.Defaultcomo, Binder o definido nullcomo, a matriz de objetos dos valores de nullíndice definidos como, e o CultureInfo definido como null.This is a convenience method that provides an implementation for the abstract GetValue(Object, BindingFlags, Binder, Object[], CultureInfo) method with the BindingFlags parameter set to BindingFlags.Default, the Binder set to null, the object array of index values set to null, and the CultureInfo set to null.

GetValue(Object, Object[])

Retorna o valor da propriedade de um objeto especificado com os valores de índice opcionais de propriedades indexadas.Returns the property value of a specified object with optional index values for indexed properties.

public:
 virtual System::Object ^ GetValue(System::Object ^ obj, cli::array <System::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.The object whose property value will be returned.

index
Object[]

Valores de índice opcionais para propriedades indexadas.Optional index values for indexed properties. Os índices de propriedades indexadas são baseados em zero.The indexes of indexed properties are zero-based. Esse valor deve ser null para propriedades não indexadas.This value should be null for non-indexed properties.

Retornos

O valor da propriedade do objeto especificado.The property value of the specified object.

Implementações

Exceções

A matriz index não contém o tipo de argumentos necessários.The index array does not contain the type of arguments needed.

- ou --or- O acessador get da propriedade não foi encontrado.The property's get accessor is not found.

No .NET para aplicativos da Windows Store ou na Biblioteca de Classes Portátil, capture Exception em vez disso.In the .NET for Windows Store apps or the Portable Class Library, catch Exception instead.

O objeto não corresponde ao tipo de destino ou uma propriedade é uma propriedade de instância, mas obj é null.The object does not match the target type, or a property is an instance property but obj is null.

O número de parâmetros em index não corresponde ao número de parâmetros usados pela propriedade indexada.The number of parameters in index does not match the number of parameters the indexed property takes.

Em vez disso, no .NET para aplicativos da Windows Store ou na Biblioteca de Classes Portátil, capture a exceção de classe base, MemberAccessException.In the .NET for Windows Store apps or the Portable Class Library, catch the base class exception, MemberAccessException, instead.

Houve uma tentativa inválida de acessar um método privado ou protegido em uma classe.There was an illegal attempt to access a private or protected method inside a class.

Erro ao recuperar o valor da propriedade.An error occurred while retrieving the property value. Por exemplo, um valor de índice especificado para uma propriedade indexada está fora do intervalo.For example, an index value specified for an indexed property is out of range. A propriedade InnerException indica o motivo do erro.The InnerException property indicates the reason for the error.

Exemplos

O exemplo a seguir mostra como obter o valor de uma propriedade indexada.The following example shows how to get the value of an indexed property. A String.Chars[Int32] propriedade é a propriedade padrão (o indexador em C#) da String classe.The String.Chars[Int32] property is the default property (the indexer in C#) of the String class.

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 GetIndexParameters o método.To determine whether a property is indexed, use the GetIndexParameters method. Se a matriz resultante tiver 0 (zero) elementos, a propriedade não será indexada.If the resulting array has 0 (zero) elements, the property is not indexed.

Esse é um método de conveniência que fornece uma implementação para o GetValue método abstract com BindingFlags um parâmetro Defaultde, Binder o definido nullcomo e o CultureInfo definido como null.This is a convenience method that provides an implementation for the abstract GetValue method with a BindingFlags parameter of Default, the Binder set to null, and the CultureInfo set to null.

Como propriedades estáticas pertencem ao tipo, não a objetos individuais, obtenha propriedades estáticas null passando como o argumento de objeto.Because static properties belong to the type, not individual objects, get static properties by passing null as the object argument. Por exemplo, use o seguinte código para obter a propriedade CurrentCulture estática de CultureInfo :For example, use the following code to get the static CurrentCulture property of 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.To use the GetValue method, first get the class Type. No, obtenha o PropertyInfo. TypeFrom the Type, get the PropertyInfo. No, use o GetValue método. PropertyInfoFrom the PropertyInfo, use the GetValue method.

Observação

A partir do .NET Framework 2.0 Service Pack 1.NET Framework 2.0 Service Pack 1, esse método pode 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ão dos membros não públicos for restrito ao conjunto de concessão do chamador ou a um subconjunto dele.Starting with the .NET Framework 2.0 Service Pack 1.NET Framework 2.0 Service Pack 1, this method can be used to access non-public members if the caller has been granted ReflectionPermission with the ReflectionPermissionFlag.RestrictedMemberAccess flag and if the grant set of the non-public members is restricted to the caller's grant set, or a subset thereof. (Consulte considerações de segurança para reflexão.)(See Security Considerations for Reflection.)

Para usar essa funcionalidade, seu aplicativo deve ser direcionado ao .NET Framework 3,5.NET Framework 3.5 ou posterior.To use this functionality, your application should target the .NET Framework 3,5.NET Framework 3.5 or later.

Segurança

ReflectionPermission
quando invocado com associação tardia por meio de mecanismos como InvokeMember(String, BindingFlags, Binder, Object, Object[], ParameterModifier[], CultureInfo, String[]).when invoked late-bound through mechanisms such as InvokeMember(String, BindingFlags, Binder, Object, Object[], ParameterModifier[], CultureInfo, String[]). Enumeração associada: MemberAccess.Associated enumeration: MemberAccess.

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.When overridden in a derived class, returns the property value of a specified object that has the specified binding, index, and culture-specific information.

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);
abstract member GetValue : obj * System.Reflection.BindingFlags * System.Reflection.Binder * obj[] * System.Globalization.CultureInfo -> obj

Parâmetros

obj
Object

O objeto cujo valor da propriedade será retornado.The object whose property value will be returned.

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.A bitwise combination of the following enumeration members that specify the invocation attribute: InvokeMethod, CreateInstance, Static, GetField, SetField, GetProperty, and SetProperty. É necessário especificar um atributo de invocação adequado.You must specify a suitable invocation attribute. Por exemplo, para invocar um membro estático, defina o sinalizador Static.For example, to invoke a static member, set the Static flag.

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.An object that enables the binding, coercion of argument types, invocation of members, and retrieval of MemberInfo objects through reflection. Caso binder seja null, o associador padrão é usado.If binder is null, the default binder is used.

index
Object[]

Valores de índice opcionais para propriedades indexadas.Optional index values for indexed properties. Esse valor deve ser null para propriedades não indexadas.This value should be null for non-indexed properties.

culture
CultureInfo

A cultura para a qual o recurso deve ser localizado.The culture for which the resource is to be localized. Se o recurso não estiver localizado para essa cultura, a propriedade Parent será chamada sucessivamente em busca de uma correspondência.If the resource is not localized for this culture, the Parent property will be called successively in search of a match. Se esse valor for null, as informações específicas da cultura serão obtidas da propriedade CurrentUICulture.If this value is null, the culture-specific information is obtained from the CurrentUICulture property.

Retornos

O valor da propriedade do objeto especificado.The property value of the specified object.

Implementações

Exceções

A matriz index não contém o tipo de argumentos necessários.The index array does not contain the type of arguments needed.

- ou --or- O acessador get da propriedade não foi encontrado.The property's get accessor is not found.

O objeto não corresponde ao tipo de destino ou uma propriedade é uma propriedade de instância, mas obj é null.The object does not match the target type, or a property is an instance property but obj is null.

O número de parâmetros em index não corresponde ao número de parâmetros usados pela propriedade indexada.The number of parameters in index does not match the number of parameters the indexed property takes.

Houve uma tentativa inválida de acessar um método privado ou protegido em uma classe.There was an illegal attempt to access a private or protected method inside a class.

Erro ao recuperar o valor da propriedade.An error occurred while retrieving the property value. Por exemplo, um valor de índice especificado para uma propriedade indexada está fora do intervalo.For example, an index value specified for an indexed property is out of range. A propriedade InnerException indica o motivo do erro.The InnerException property indicates the reason for the error.

Comentários

Para determinar se uma propriedade é indexada, use GetIndexParameters o método.To determine whether a property is indexed, use the GetIndexParameters method. Se a matriz resultante tiver 0 (zero) elementos, a propriedade não será indexada.If the resulting array has 0 (zero) elements, the property is not indexed.

Como propriedades estáticas pertencem ao tipo, não a objetos individuais, obtenha propriedades estáticas null passando como o argumento de objeto.Because static properties belong to the type, not individual objects, get static properties by passing null as the object argument. Por exemplo, use o seguinte código para obter a propriedade CurrentCulture estática de CultureInfo :For example, use the following code to get the static CurrentCulture property of 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.To use the GetValue method, first get the class Type. No, obtenha o PropertyInfo. TypeFrom the Type, get the PropertyInfo. No, use o GetValue método. PropertyInfoFrom the PropertyInfo, use the GetValue method.

Observação

A partir do .NET Framework 2.0 Service Pack 1.NET Framework 2.0 Service Pack 1, esse método pode 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ão dos membros não públicos for restrito ao conjunto de concessão do chamador ou a um subconjunto dele.Starting with the .NET Framework 2.0 Service Pack 1.NET Framework 2.0 Service Pack 1, this method can be used to access non-public members if the caller has been granted ReflectionPermission with the ReflectionPermissionFlag.RestrictedMemberAccess flag and if the grant set of the non-public members is restricted to the caller's grant set, or a subset thereof. (Consulte considerações de segurança para reflexão.)(See Security Considerations for Reflection.)

Para usar essa funcionalidade, seu aplicativo deve ser direcionado ao .NET Framework 3,5.NET Framework 3.5 ou posterior.To use this functionality, your application should target the .NET Framework 3,5.NET Framework 3.5 or later.

Segurança

ReflectionPermission
quando invocado com associação tardia por meio de mecanismos como InvokeMember(String, BindingFlags, Binder, Object, Object[], ParameterModifier[], CultureInfo, String[]).when invoked late-bound through mechanisms such as InvokeMember(String, BindingFlags, Binder, Object, Object[], ParameterModifier[], CultureInfo, String[]). Enumeração associada: MemberAccess.Associated enumeration: MemberAccess.

Veja também

Aplica-se a