Compartir a través de


PropertyInfo.GetValue Método

Definición

Devuelve el valor de propiedad de un objeto especificado.

Sobrecargas

GetValue(Object)

Devuelve el valor de propiedad de un objeto especificado.

GetValue(Object, Object[])

Devuelve el valor de propiedad de un objeto especificado con valores de índice opcionales para las propiedades indexadas.

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

Cuando se reemplaza en una clase derivada, devuelve el valor de propiedad de un objeto especificado que tiene la información específica del enlace, el índice y la referencia cultural especificados.

GetValue(Object)

Source:
PropertyInfo.cs
Source:
PropertyInfo.cs
Source:
PropertyInfo.cs

Devuelve el valor de propiedad de un 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

Objeto cuyo valor de propiedad se devolverá.

Devoluciones

Valor de propiedad del objeto especificado.

Ejemplos

En el ejemplo siguiente se define una clase Planet que tiene dos propiedades: Name, el nombre del planeta; y Distance, la distancia del planeta de la Tierra. El ejemplo crea una instancia de un objeto Planet que representa el planeta Júpiter y lo pasa a un método GetPropertyValues que muestra información sobre las propiedades y usa el método GetValue para obtener el valor de cada propiedad Planet.

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

Comentarios

Llame a la sobrecarga GetValue(Object) para recuperar el valor de una propiedad no indexada; Si intenta recuperar el valor de una propiedad indizada, el método produce una excepción de TargetParameterCountException. Puede determinar si una propiedad está indizada o no llamando al método GetIndexParameters. Si la longitud de la matriz de ParameterInfo devuelta es cero, la propiedad no se indexa.

Este es un método de conveniencia que proporciona una implementación para el método de GetValue(Object, BindingFlags, Binder, Object[], CultureInfo) abstracto con el parámetro BindingFlags establecido en BindingFlags.Default, el Binder establecido en null, la matriz de objetos de valores de índice establecido en nully el CultureInfo establecido en null.

Se aplica a

GetValue(Object, Object[])

Source:
PropertyInfo.cs
Source:
PropertyInfo.cs
Source:
PropertyInfo.cs

Devuelve el valor de propiedad de un objeto especificado con valores de índice opcionales para las propiedades 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

Objeto cuyo valor de propiedad se devolverá.

index
Object[]

Valores de índice opcionales para las propiedades indizada. Los índices de propiedades indexadas se basan en cero. Este valor debe ser null para las propiedades no indexadas.

Devoluciones

Valor de propiedad del objeto especificado.

Implementaciones

Excepciones

La matriz index no contiene el tipo de argumentos necesarios.

-o-

No se encuentra el descriptor de acceso get de la propiedad.

El objeto no coincide con el tipo de destino o una propiedad es una propiedad de instancia, pero obj es null.

Nota: En .NET para aplicaciones de la Tienda Windows o la biblioteca de clases portable de , capture Exception en su lugar.

El número de parámetros de index no coincide con el número de parámetros que toma la propiedad indizada.

Hubo un intento ilegal de acceder a un método privado o protegido dentro de una clase .

Nota: En .NET para aplicaciones de la Tienda Windows o la biblioteca de clases portable de , captura la excepción de clase base, MemberAccessException, en su lugar.

Error al recuperar el valor de la propiedad. Por ejemplo, un valor de índice especificado para una propiedad indizada está fuera del intervalo. La propiedad InnerException indica el motivo del error.

Ejemplos

En el ejemplo siguiente se muestra cómo obtener el valor de una propiedad indizada. La propiedad String.Chars[] es la propiedad predeterminada (el indexador en C#) de la clase String.

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

Comentarios

Para determinar si una propiedad está indizada, use el método GetIndexParameters. Si la matriz resultante tiene 0 elementos (cero), la propiedad no se indexa.

Este es un método de conveniencia que proporciona una implementación para el método de GetValue abstracto con un parámetro BindingFlags de Default, el Binder establecido en nully el CultureInfo establecido en null.

Dado que las propiedades estáticas pertenecen al tipo, no a los objetos individuales, obtenga propiedades estáticas pasando null como argumento de objeto. Por ejemplo, use el código siguiente para obtener la propiedad de CurrentCulture estática de CultureInfo :

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

Para usar el método GetValue, obtenga primero la clase Type. En el Type, obtenga el PropertyInfo. En el PropertyInfo, use el método GetValue.

Nota

A partir de .NET Framework 2.0, este método se puede usar para acceder a miembros no públicos si se ha concedido al autor de la llamada ReflectionPermission con la marca ReflectionPermissionFlag.RestrictedMemberAccess y si el conjunto de concesión de los miembros no públicos está restringido al conjunto de concesión del autor de la llamada o a un subconjunto de ellos. (Consulte Consideraciones de seguridad para lade reflexión). Para usar esta funcionalidad, la aplicación debe tener como destino .NET Framework 3.5 o posterior.

Se aplica a

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

Source:
PropertyInfo.cs
Source:
PropertyInfo.cs
Source:
PropertyInfo.cs

Cuando se reemplaza en una clase derivada, devuelve el valor de propiedad de un objeto especificado que tiene la información específica del enlace, el índice y la referencia cultural especificados.

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

Objeto cuyo valor de propiedad se devolverá.

invokeAttr
BindingFlags

Combinación bit a bit de los siguientes miembros de enumeración que especifican el atributo de invocación: InvokeMethod, CreateInstance, Static, GetField, SetField, GetPropertyy SetProperty. Debe especificar un atributo de invocación adecuado. Por ejemplo, para invocar un miembro estático, establezca la marca Static.

binder
Binder

Objeto que permite el enlace, la coerción de tipos de argumentos, la invocación de miembros y la recuperación de objetos MemberInfo a través de la reflexión. Si binder es null, se usa el enlazador predeterminado.

index
Object[]

Valores de índice opcionales para las propiedades indizada. Este valor debe ser null para las propiedades no indexadas.

culture
CultureInfo

Referencia cultural para la que se va a localizar el recurso. Si el recurso no está localizado para esta referencia cultural, se llamará sucesivamente a la propiedad Parent en búsqueda de una coincidencia. Si este valor es null, la información específica de la referencia cultural se obtiene de la propiedad CurrentUICulture.

Devoluciones

Valor de propiedad del objeto especificado.

Implementaciones

Excepciones

La matriz index no contiene el tipo de argumentos necesarios.

-o-

No se encuentra el descriptor de acceso get de la propiedad.

El objeto no coincide con el tipo de destino o una propiedad es una propiedad de instancia, pero obj es null.

El número de parámetros de index no coincide con el número de parámetros que toma la propiedad indizada.

Hubo un intento ilegal de acceder a un método privado o protegido dentro de una clase .

Error al recuperar el valor de la propiedad. Por ejemplo, un valor de índice especificado para una propiedad indizada está fuera del intervalo. La propiedad InnerException indica el motivo del error.

Comentarios

Para determinar si una propiedad está indizada, use el método GetIndexParameters. Si la matriz resultante tiene 0 elementos (cero), la propiedad no se indexa.

Dado que las propiedades estáticas pertenecen al tipo, no a los objetos individuales, obtenga propiedades estáticas pasando null como argumento de objeto. Por ejemplo, use el código siguiente para obtener la propiedad de CurrentCulture estática de CultureInfo :

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

Para usar el método GetValue, obtenga primero la clase Type. En el Type, obtenga el PropertyInfo. En el PropertyInfo, use el método GetValue.

Nota

A partir de .NET Framework 2.0, este método se puede usar para acceder a miembros no públicos si se ha concedido al autor de la llamada ReflectionPermission con la marca ReflectionPermissionFlag.RestrictedMemberAccess y si el conjunto de concesión de los miembros no públicos está restringido al conjunto de concesión del autor de la llamada o a un subconjunto de ellos. (Consulte Consideraciones de seguridad para lade reflexión). Para usar esta funcionalidad, la aplicación debe tener como destino .NET Framework 3.5 o posterior.

Consulte también

Se aplica a