PropertyInfo.GetValue Método
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
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 indizadas. |
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. |
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 va a devolver.
Devoluciones
Valor de propiedad del objeto especificado.
Ejemplos
En el ejemplo siguiente se define una Planet
clase que tiene dos propiedades: Name
, el nombre del planeta; y Distance
, la distancia del planeta desde la Tierra. En el ejemplo se crea una instancia de un Planet
objeto que representa el planeta Júpiter y se pasa a un GetPropertyValues
método que muestra información sobre las propiedades y utiliza el GetValue método para obtener el valor de cada Planet
propiedad.
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 la GetValue(Object) sobrecarga para recuperar el valor de una propiedad no indizada; si intenta recuperar el valor de una propiedad indizada, el método produce una TargetParameterCountException excepción. Puede determinar si una propiedad está indizada o no llamando al GetIndexParameters método . Si la longitud de la matriz devuelta ParameterInfo es cero, la propiedad no se indexa.
Se trata de un método práctico que proporciona una implementación para el método abstracto con el BindingFlags parámetro establecido BindingFlags.Defaulten , establecido null
Binder en , la matriz de objetos de valores de índice establecido null
en y el CultureInfo establecido en null
.GetValue(Object, BindingFlags, Binder, Object[], CultureInfo)
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 indizadas.
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 va a devolver.
- index
- Object[]
Valores de índice opcionales para propiedades indizadas. Los índices de las propiedades indexadas son de base cero. Este valor debe ser null
para propiedades no indizadas.
Devoluciones
Valor de propiedad del objeto especificado.
Implementaciones
Excepciones
La matriz index
no contiene el tipo de argumentos necesario.
O bien
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, 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 indexada.
Hubo un intento no válido de obtener acceso 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, capture 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 indexada 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 String.Chars[] propiedad es la propiedad predeterminada (el indexador en C#) de la String clase .
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 GetIndexParameters método . Si la matriz resultante tiene 0 elementos (cero), la propiedad no se indexa.
Se trata de un método práctico que proporciona una implementación para el método abstracto con un BindingFlags
parámetro de Default
, el Binder
establecido null
en y el CultureInfo
establecido en null
.GetValue
Dado que las propiedades estáticas pertenecen al tipo, no a los objetos individuales, obtienen propiedades estáticas pasando null
como argumento de objeto. Por ejemplo, use el código siguiente para obtener la propiedad estática CurrentCulture
de 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
.
Type
En , obtenga .PropertyInfo
PropertyInfo
En , use el GetValue
método .
Nota
A partir de .NET Framework 2.0, este método se puede usar para tener acceso a miembros no públicos si se ha concedido ReflectionPermission al autor de la llamada con la ReflectionPermissionFlag.RestrictedMemberAccess marca 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 la 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 el enlace, el índice y la información específica de 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 va a devolver.
- invokeAttr
- 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
. Debe especificarse un atributo de invocación apropiado. Por ejemplo, para llamar a un miembro estático, establezca la marca Static
.
- 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. Si binder
es null
, se usa el enlazador predeterminado.
- index
- Object[]
Valores de índice opcionales para propiedades indizadas. Este valor debe ser null
para propiedades no indizadas.
- culture
- CultureInfo
Referencia cultural a la que se va a adaptar el recurso. Si el recurso no se encuentra el recurso correspondiente a esta referencia cultural, se llamará sucesivamente a Parent para buscar 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 necesario.
O bien
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 indexada.
Hubo un intento no válido de obtener acceso 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 indexada está fuera del intervalo. La propiedad InnerException indica el motivo del error.
Comentarios
Para determinar si una propiedad está indizada, use el GetIndexParameters método . 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, obtienen propiedades estáticas pasando null
como argumento de objeto. Por ejemplo, use el código siguiente para obtener la propiedad estática CurrentCulture
de 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
.
Type
En , obtenga .PropertyInfo
PropertyInfo
En , use el GetValue
método .
Nota
A partir de .NET Framework 2.0, este método se puede usar para tener acceso a miembros no públicos si se ha concedido ReflectionPermission al autor de la llamada con la ReflectionPermissionFlag.RestrictedMemberAccess marca 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 la reflexión). Para usar esta funcionalidad, la aplicación debe tener como destino .NET Framework 3.5 o posterior.