PropertyInfo.GetValue PropertyInfo.GetValue PropertyInfo.GetValue PropertyInfo.GetValue Method

Definición

Devuelve el valor de propiedad de un objeto especificado.Returns the property value of a specified object.

Sobrecargas

GetValue(Object) GetValue(Object) GetValue(Object) GetValue(Object)

Devuelve el valor de propiedad de un objeto especificado.Returns the property value of a specified object.

GetValue(Object, Object[]) GetValue(Object, Object[]) GetValue(Object, Object[]) GetValue(Object, Object[])

Devuelve el valor de propiedad de un objeto especificado con valores de índice opcionales para las propiedades indizadas.Returns the property value of a specified object with optional index values for indexed properties.

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

Cuando se reemplaza en una clase derivada, devuelve el valor de propiedad de un objeto especificado que tiene el enlace, el índice y la información específica de la referencia cultural especificados.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) GetValue(Object) GetValue(Object) GetValue(Object)

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

Objeto cuyo valor de propiedad se va a devolver.The object whose property value will be returned.

Devoluciones

Valor de propiedad del objeto especificado.The property value of the specified object.

Ejemplos

En el ejemplo siguiente se Planet define una clase que tiene dos Namepropiedades:, el nombre del planeta; Distancey, la distancia del planeta desde tierra.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. En el ejemplo se crea Planet una instancia de un objeto que representa el planeta Júpiter y GetPropertyValues lo pasa a un método que muestra información sobre las GetValue propiedades y utiliza el método para obtener Planet el valor de cada propiedad.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

Comentarios

Se llama a GetValue(Object) la sobrecarga para recuperar el valor de una propiedad no indizada; si se intenta recuperar el valor de una propiedad indizada, el método produce una TargetParameterCountException excepción.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. Puede determinar si una propiedad está indizada o no mediante una llamada GetIndexParameters al método.You can determine whether a property is indexed or not by calling the GetIndexParameters method. Si la longitud de la matriz ParameterInfo devuelta es cero, la propiedad no está indizada.If the length of the returned ParameterInfo array is zero, the property is not indexed.

Se trata de un método útil que proporciona una implementación para el GetValue(Object, BindingFlags, Binder, Object[], CultureInfo) método abstracto BindingFlags con el Binder parámetro BindingFlags.Defaultestablecido en, el nullestablecido en, la matriz de objetos de valores nullde índice establecida en, y establecido en null. CultureInfoThis 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[]) GetValue(Object, Object[]) GetValue(Object, Object[]) GetValue(Object, Object[])

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

Objeto cuyo valor de propiedad se va a devolver.The object whose property value will be returned.

index
Object[]

Valores de índice opcionales para propiedades indizadas.Optional index values for indexed properties. Los índices de las propiedades indexadas son de base cero.The indexes of indexed properties are zero-based. Este valor debe ser null para propiedades no indizadas.This value should be null for non-indexed properties.

Devoluciones

Valor de propiedad del objeto especificado.The property value of the specified object.

Implementaciones

Excepciones

La matriz index no contiene el tipo de argumentos necesario.The index array does not contain the type of arguments needed.

O bien-or- No se encuentra el descriptor de acceso get de la propiedad.The property's get accessor is not found.

En .NET para aplicaciones de la Tienda Windows o la Biblioteca de clases portable, capture Exception en su lugar.In the .NET for Windows Store apps or the Portable Class Library, catch Exception instead.

El objeto no coincide con el tipo de destino o una propiedad es una propiedad de instancia pero obj es null.The object does not match the target type, or a property is an instance property but obj is null.

El número de parámetros de index no coincide con el número de parámetros que toma la propiedad indexada.The number of parameters in index does not match the number of parameters the indexed property takes.

En .NET para aplicaciones de la Tienda Windows o la Biblioteca de clases portable, capture en su lugar la excepción de clase base, MemberAccessException.In the .NET for Windows Store apps or the Portable Class Library, catch the base class exception, MemberAccessException, instead.

Hubo un intento no válido de obtener acceso a un método privado o protegido dentro de una clase.There was an illegal attempt to access a private or protected method inside a class.

Error al recuperar el valor de la propiedad.An error occurred while retrieving the property value. Por ejemplo, un valor de índice especificado para una propiedad indizada está fuera del intervalo.For example, an index value specified for an indexed property is out of range. La propiedad InnerException indica el motivo del error.The InnerException property indicates the reason for the error.

Ejemplos

En el ejemplo siguiente se muestra cómo obtener el valor de una propiedad indizada.The following example shows how to get the value of an indexed property. La String.Chars[Int32] propiedad es la propiedad predeterminada (el indizador en C#) de la String clase.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

Comentarios

Para determinar si una propiedad está indizada, use GetIndexParameters el método.To determine whether a property is indexed, use the GetIndexParameters method. Si la matriz resultante tiene 0 (cero) elementos, la propiedad no está indizada.If the resulting array has 0 (zero) elements, the property is not indexed.

Este es un método útil que proporciona una implementación para el método GetValue abstracto con BindingFlags un parámetro Defaultde, Binder el establecido nullen y el CultureInfo establecido en 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.

Dado que las propiedades estáticas pertenecen al tipo, no a objetos individuales, obtenga las null propiedades estáticas pasando como el argumento del objeto.Because static properties belong to the type, not individual objects, get static properties by passing null as the object argument. Por ejemplo, use el código siguiente para obtener la propiedad 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 el GetValue método, obtenga primero la clase Type.To use the GetValue method, first get the class Type. En, obtenga el PropertyInfo. TypeFrom the Type, get the PropertyInfo. En, use el GetValue método. PropertyInfoFrom the PropertyInfo, use the GetValue method.

Nota

A partir de ReflectionPermission ReflectionPermissionFlag.RestrictedMemberAccess , este método se puede utilizar para tener acceso a los miembros no públicos si el llamador se ha concedido con la marca y si el conjunto de permisos de los miembros no públicos está restringido al conjunto de permisos del llamador o a un .NET Framework 2.0 Service Pack 1.NET Framework 2.0 Service Pack 1subconjunto. mismo.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 consideraciones de seguridad para la reflexión).(See Security Considerations for Reflection.)

Para utilizar esta funcionalidad, la aplicación debe utilizar .NET Framework 3,5.NET Framework 3.5 o posterior como destino.To use this functionality, your application should target the .NET Framework 3,5.NET Framework 3.5 or later.

Seguridad

ReflectionPermission
Cuando se invoca enlazado en tiempo de ejecución mediante InvokeMember(String, BindingFlags, Binder, Object, Object[], ParameterModifier[], CultureInfo, String[])mecanismos como.when invoked late-bound through mechanisms such as InvokeMember(String, BindingFlags, Binder, Object, Object[], ParameterModifier[], CultureInfo, String[]). Enumeración asociada: MemberAccess.Associated enumeration: MemberAccess.

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

Cuando se reemplaza en una clase derivada, devuelve el valor de propiedad de un objeto especificado que tiene el enlace, el índice y la información específica de la referencia cultural especificados.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 Object Object Object

Objeto cuyo valor de propiedad se va a devolver.The object whose property value will be returned.

invokeAttr
BindingFlags BindingFlags BindingFlags BindingFlags

Una combinación bit a bit de los miembros de enumeración siguientes que especifican el atributo de invocación: InvokeMethod, CreateInstance, Static, GetField, SetField, GetProperty y SetProperty.A bitwise combination of the following enumeration members that specify the invocation attribute: InvokeMethod, CreateInstance, Static, GetField, SetField, GetProperty, and SetProperty. Debe especificarse un atributo de invocación apropiado.You must specify a suitable invocation attribute. Por ejemplo, para llamar a un miembro estático, establezca la marca Static.For example, to invoke a static member, set the Static flag.

binder
Binder Binder Binder Binder

Objeto que permite el enlace, la conversión de tipos de argumentos, la llamada de miembros y la recuperación de objetos MemberInfo mediante reflexión.An object that enables the binding, coercion of argument types, invocation of members, and retrieval of MemberInfo objects through reflection. Si binder es null, se usa el enlazador predeterminado.If binder is null, the default binder is used.

index
Object[]

Valores de índice opcionales para propiedades indizadas.Optional index values for indexed properties. Este valor debe ser null para propiedades no indizadas.This value should be null for non-indexed properties.

culture
CultureInfo CultureInfo CultureInfo CultureInfo

Referencia cultural a la que se va a adaptar el recurso.The culture for which the resource is to be localized. Si el recurso no se encuentra el recurso correspondiente a esta referencia cultural, se llamará sucesivamente a Parent para buscar una coincidencia.If the resource is not localized for this culture, the Parent property will be called successively in search of a match. Si este valor es null, la información específica de la referencia cultural se obtiene de la propiedad CurrentUICulture.If this value is null, the culture-specific information is obtained from the CurrentUICulture property.

Devoluciones

Valor de propiedad del objeto especificado.The property value of the specified object.

Implementaciones

Excepciones

La matriz index no contiene el tipo de argumentos necesario.The index array does not contain the type of arguments needed.

O bien-or- No se encuentra el descriptor de acceso get de la propiedad.The property's get accessor is not found.

El objeto no coincide con el tipo de destino o una propiedad es una propiedad de instancia pero obj es null.The object does not match the target type, or a property is an instance property but obj is null.

El número de parámetros de index no coincide con el número de parámetros que toma la propiedad indexada.The number of parameters in index does not match the number of parameters the indexed property takes.

Hubo un intento no válido de obtener acceso a un método privado o protegido dentro de una clase.There was an illegal attempt to access a private or protected method inside a class.

Error al recuperar el valor de la propiedad.An error occurred while retrieving the property value. Por ejemplo, un valor de índice especificado para una propiedad indizada está fuera del intervalo.For example, an index value specified for an indexed property is out of range. La propiedad InnerException indica el motivo del error.The InnerException property indicates the reason for the error.

Comentarios

Para determinar si una propiedad está indizada, use GetIndexParameters el método.To determine whether a property is indexed, use the GetIndexParameters method. Si la matriz resultante tiene 0 (cero) elementos, la propiedad no está indizada.If the resulting array has 0 (zero) elements, the property is not indexed.

Dado que las propiedades estáticas pertenecen al tipo, no a objetos individuales, obtenga las null propiedades estáticas pasando como el argumento del objeto.Because static properties belong to the type, not individual objects, get static properties by passing null as the object argument. Por ejemplo, use el código siguiente para obtener la propiedad 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 el GetValue método, obtenga primero la clase Type.To use the GetValue method, first get the class Type. En, obtenga el PropertyInfo. TypeFrom the Type, get the PropertyInfo. En, use el GetValue método. PropertyInfoFrom the PropertyInfo, use the GetValue method.

Nota

A partir de ReflectionPermission ReflectionPermissionFlag.RestrictedMemberAccess , este método se puede utilizar para tener acceso a los miembros no públicos si el llamador se ha concedido con la marca y si el conjunto de permisos de los miembros no públicos está restringido al conjunto de permisos del llamador o a un .NET Framework 2.0 Service Pack 1.NET Framework 2.0 Service Pack 1subconjunto. mismo.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 consideraciones de seguridad para la reflexión).(See Security Considerations for Reflection.)

Para utilizar esta funcionalidad, la aplicación debe utilizar .NET Framework 3,5.NET Framework 3.5 o posterior como destino.To use this functionality, your application should target the .NET Framework 3,5.NET Framework 3.5 or later.

Seguridad

ReflectionPermission
Cuando se invoca enlazado en tiempo de ejecución mediante InvokeMember(String, BindingFlags, Binder, Object, Object[], ParameterModifier[], CultureInfo, String[])mecanismos como.when invoked late-bound through mechanisms such as InvokeMember(String, BindingFlags, Binder, Object, Object[], ParameterModifier[], CultureInfo, String[]). Enumeración asociada: MemberAccess.Associated enumeration: MemberAccess.

Consulte también:

Se aplica a