PropertyInfo.GetValue Método
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
Devolve o valor da propriedade de um objeto especificado.
Sobrecargas
| Name | Description |
|---|---|
| GetValue(Object) |
Devolve o valor da propriedade de um objeto especificado. |
| GetValue(Object, Object[]) |
Devolve o valor de propriedade de um objeto especificado com valores de índice opcionais para propriedades indexadas. |
| GetValue(Object, BindingFlags, Binder, Object[], CultureInfo) |
Quando sobrescrito numa classe derivada, devolve o valor de propriedade de um objeto especificado que tem a ligação especificada, índice e informação específica de cultura. |
GetValue(Object)
Devolve o valor da propriedade de um objeto especificado.
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 de propriedade será devolvido.
Devoluções
O valor da propriedade do objeto especificado.
Exemplos
O exemplo seguinte define uma Planet classe que tem duas propriedades: Name, o nome do planeta; e Distance, a distância do planeta à Terra. O exemplo instancia um Planet objeto que representa o planeta Júpiter e passa-o a um GetPropertyValues método que apresenta informação sobre as propriedades e utiliza 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
Observações
Chama a GetValue(Object) sobrecarga para recuperar o valor de uma propriedade não indexada; se tentar recuperar o valor de uma propriedade indexada, o método lança uma TargetParameterCountException exceção. Pode determinar se uma propriedade está indexada ou não chamando o GetIndexParameters método. Se o comprimento do array devolvido ParameterInfo for zero, a propriedade não é indexada.
Este é um método de conveniência que fornece uma implementação para o método abstrato com o BindingFlags parâmetro definido para BindingFlags.Default, o Binder conjunto para null, o array de objetos de valores de índices definido para null, e o CultureInfo conjunto para null.GetValue(Object, BindingFlags, Binder, Object[], CultureInfo)
Aplica-se a
GetValue(Object, Object[])
Devolve o valor de propriedade de um objeto especificado com valores de índice opcionais para propriedades indexadas.
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 de propriedade será devolvido.
- index
- Object[]
Valores de índice opcionais para propriedades indexadas. Os índices das propriedades indexadas são baseados em zero. Este valor deve referir-se null a propriedades não indexadas.
Devoluções
O valor da propriedade do objeto especificado.
Implementações
Exceções
O index array não contém o tipo de argumentos necessário.
-ou-
O acessório da get propriedade não é encontrado.
O objeto não corresponde ao tipo de destino, ou uma propriedade é uma propriedade de instância mas obj é null.
Nota: Em .NET para aplicações Windows Store ou a Portable Class Library, escolha Exception em vez disso.
O número de parâmetros em index não corresponde ao número de parâmetros que a propriedade indexada utiliza.
Houve uma tentativa ilegal de aceder a um método privado ou protegido dentro de uma aula.
Nota: Em .NET para aplicações Windows Store ou a Portable Class Library, apanhe a exceção da classe base, MemberAccessException, em vez disso.
Ocorreu um erro ao recuperar o valor da propriedade. Por exemplo, um valor de índice especificado para uma propriedade indexada está fora do intervalo. A InnerException propriedade indica a razão do erro.
Exemplos
O exemplo seguinte 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
Observações
Para determinar se uma propriedade está indexada, use o GetIndexParameters método. Se o array resultante tiver 0 (zero) elementos, a propriedade não é indexada.
Este é um método de conveniência que fornece uma implementação para o método abstrato com um BindingFlags parâmetro de Default, o Binder conjunto para null, e o CultureInfo conjunto para null.GetValue
Como as propriedades estáticas pertencem ao tipo, não aos objetos individuais, obtém-se propriedades estáticas ao passarem null pelo 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 obtém a classe Type. A partir do Type, obtenha o PropertyInfo. A partir do PropertyInfo, use o GetValue método.
Note
Este método pode ser usado para aceder a membros não públicos se o chamador tiver recebido ReflectionPermission a ReflectionPermissionFlag.RestrictedMemberAccess bandeira e se o conjunto de concessões dos membros privados estiver restrito ao conjunto de concessão do chamador, ou a um subconjunto destes. (Ver Considerações de Segurança para Reflexão.) Para usar esta funcionalidade, a sua aplicação deve direcionar-se para o .NET Framework 3.5 ou posterior.
Aplica-se a
GetValue(Object, BindingFlags, Binder, Object[], CultureInfo)
Quando sobrescrito numa classe derivada, devolve o valor de propriedade de um objeto especificado que tem a ligação especificada, índice e informação específica de cultura.
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
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 de propriedade será devolvido.
- invokeAttr
- BindingFlags
Uma combinação bit a bit dos seguintes membros de enumeração que especificam o atributo de invocação: InvokeMethod, CreateInstance, Static, GetField, SetField, , GetProperty, e SetProperty. Deve especificar um atributo de invocação adequado. Por exemplo, para invocar um membro estático, defina o Static flag.
- binder
- Binder
Um objeto que permite a ligação, coerção de tipos de argumentos, invocação de membros e recuperação de MemberInfo objetos através da reflexão. Se binder for null, utiliza-se o dossier padrão.
- index
- Object[]
Valores de índice opcionais para propriedades indexadas. Este valor deve referir-se null a propriedades não indexadas.
- culture
- CultureInfo
A cultura para a qual o recurso deve ser localizado. Se o recurso não estiver localizado para esta cultura, a Parent propriedade será chamada sucessivamente à procura de uma correspondência. Se este valor for null, a informação específica da cultura é obtida a partir da CurrentUICulture propriedade.
Devoluções
O valor da propriedade do objeto especificado.
Implementações
Exceções
O index array não contém o tipo de argumentos necessário.
-ou-
O acessório da get propriedade não é 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 que a propriedade indexada utiliza.
Houve uma tentativa ilegal de aceder a um método privado ou protegido dentro de uma aula.
Ocorreu um erro ao recuperar o valor da propriedade. Por exemplo, um valor de índice especificado para uma propriedade indexada está fora do intervalo. A InnerException propriedade indica a razão do erro.
Observações
Para determinar se uma propriedade está indexada, use o GetIndexParameters método. Se o array resultante tiver 0 (zero) elementos, a propriedade não é indexada.
Como as propriedades estáticas pertencem ao tipo, não aos objetos individuais, obtém-se propriedades estáticas ao passarem null pelo 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 obtém a classe Type. A partir do Type, obtenha o PropertyInfo. A partir do PropertyInfo, use o GetValue método.
Note
Este método pode ser usado para aceder a membros não públicos se o chamador tiver recebido ReflectionPermission a ReflectionPermissionFlag.RestrictedMemberAccess bandeira e se o conjunto de concessões dos membros privados estiver restrito ao conjunto de concessão do chamador, ou a um subconjunto destes. (Ver Considerações de Segurança para Reflexão.) Para usar esta funcionalidade, a sua aplicação deve direcionar-se para o .NET Framework 3.5 ou posterior.