PropertyInfo.GetValue Méthode

Définition

Retourne la valeur de la propriété d'un objet spécifié.

Surcharges

GetValue(Object)

Retourne la valeur de la propriété d'un objet spécifié.

GetValue(Object, Object[])

Retourne la valeur de la propriété d'un objet spécifié avec des valeurs d'index facultatives pour les propriétés indexées.

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

En cas de substitution dans une classe dérivée, retourne la valeur de propriété d’un objet spécifié qui possède la liaison, l’index et les informations propres à la culture spécifiés.

GetValue(Object)

Retourne la valeur de la propriété d'un objet spécifié.

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

Paramètres

obj
Object

Objet dont la valeur de propriété sera retournée.

Retours

Valeur de la propriété de l'objet spécifié.

Exemples

L’exemple suivant définit une Planet classe qui a deux propriétés : Name, le nom de la planète ; et Distance, la distance de la planète à la Terre. L’exemple instancie un Planet objet qui représente la planète Jupiter et le transmet à une GetPropertyValues méthode qui affiche des informations sur les propriétés et utilise la GetValue méthode pour obtenir la valeur de chaque Planet propriété.

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

Remarques

Vous appelez la GetValue(Object) surcharge pour récupérer la valeur d’une propriété non indexée ; si vous essayez de récupérer la valeur d’une propriété indexée, la méthode lève une TargetParameterCountException exception. Vous pouvez déterminer si une propriété est indexée ou non en appelant la GetIndexParameters méthode . Si la longueur du tableau retourné ParameterInfo est égale à zéro, la propriété n’est pas indexée.

Il s’agit d’une méthode pratique qui fournit une implémentation pour la méthode abstraite GetValue(Object, BindingFlags, Binder, Object[], CultureInfo) avec le BindingFlags paramètre défini BindingFlags.Defaultsur , le Binder défini nullsur , le tableau d’objets de valeurs d’index défini sur nullet le CultureInfo défini sur null.

S’applique à

GetValue(Object, Object[])

Retourne la valeur de la propriété d'un objet spécifié avec des valeurs d'index facultatives pour les propriétés indexées.

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

Paramètres

obj
Object

Objet dont la valeur de propriété sera retournée.

index
Object[]

Valeurs d'index facultatives pour les propriétés indexées. Les index des propriétés indexées sont en base zéro. Cette valeur doit être null pour les propriétés non indexées.

Retours

Valeur de la propriété de l'objet spécifié.

Implémente

Exceptions

Le tableau index ne contient pas le type d’arguments requis.

- ou -

L’accesseur get de la propriété est introuvable.

L’objet ne correspond pas au type cible, ou une propriété est une propriété d’instance mais obj a la valeur null.

Remarque : Dans .NET pour les applications du Windows Store ou dans la bibliothèque de classes portable, interceptez Exception plutôt.

Le nombre de paramètres dans index ne correspond pas au nombre de paramètres que prend la propriété indexée.

Tentative non autorisée d’accéder à une méthode privée ou protégée à l’intérieur d’une classe.

Remarque : Dans .NET pour les applications du Windows Store ou la bibliothèque de classes portable, interceptez l’exception de la classe de base, MemberAccessException, à la place.

Une erreur s’est produite lors de la récupération de la valeur de la propriété. Par exemple, une valeur d’index spécifiée pour une propriété indexée est hors limites. La propriété InnerException indique la raison de l’erreur.

Exemples

L’exemple suivant montre comment obtenir la valeur d’une propriété indexée. La String.Chars[] propriété est la propriété par défaut (l’indexeur en C#) de la 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

Remarques

Pour déterminer si une propriété est indexée, utilisez la GetIndexParameters méthode . Si le tableau résultant a 0 (zéro) éléments, la propriété n’est pas indexée.

Il s’agit d’une méthode pratique qui fournit une implémentation pour la méthode abstraite GetValue avec un BindingFlags paramètre de Default, le Binder défini sur nullet le CultureInfo défini sur null.

Étant donné que les propriétés statiques appartiennent au type, et non à des objets individuels, obtenez des propriétés statiques en passant null comme argument d’objet. Par exemple, utilisez le code suivant pour obtenir la propriété statique CurrentCulture de CultureInfo :

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

Pour utiliser la GetValue méthode, commencez par obtenir la classe Type. À partir de Type, obtenez le PropertyInfo. À partir de , PropertyInfoutilisez la GetValue méthode .

Notes

À compter de .NET Framework 2.0, cette méthode peut être utilisée pour accéder aux membres non publics si l’appelant a reçu ReflectionPermission l’indicateur ReflectionPermissionFlag.RestrictedMemberAccess et si l’ensemble d’octrois des membres non publics est limité à l’ensemble d’octrois de l’appelant ou à un sous-ensemble de celui-ci. (Consultez Considérations relatives à la sécurité pour la réflexion.) Pour utiliser cette fonctionnalité, votre application doit cibler .NET Framework 3.5 ou version ultérieure.

S’applique à

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

En cas de substitution dans une classe dérivée, retourne la valeur de propriété d’un objet spécifié qui possède la liaison, l’index et les informations propres à la culture spécifiés.

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

Paramètres

obj
Object

Objet dont la valeur de propriété sera retournée.

invokeAttr
BindingFlags

Combinaison d'opérations de bits des membres suivants de l'énumération qui spécifie l'attribut d'appel : InvokeMethod, CreateInstance, Static, GetField, SetField, GetProperty, et SetProperty. Vous devez spécifier un attribut d'appel approprié. Par exemple, pour appeler un membre statique, définissez l'indicateur Static .

binder
Binder

Objet qui active la liaison, la contrainte de types d'arguments, l'appel des membres et la récupération d'objets MemberInfo par la réflexion. Si binder est null, le binder par défaut est utilisé.

index
Object[]

Valeurs d'index facultatives pour les propriétés indexées. Cette valeur doit être null pour les propriétés non indexées.

culture
CultureInfo

Culture pour laquelle la ressource doit être localisée. Si la ressource n'est pas localisée pour cette culture, la propriété Parent sera appelée pour rechercher une correspondance. Si cette valeur est null, les informations spécifiques à la culture sont obtenues à partir de la propriété CurrentUICulture.

Retours

Valeur de la propriété de l'objet spécifié.

Implémente

Exceptions

Le tableau index ne contient pas le type d’arguments requis.

- ou -

L’accesseur get de la propriété est introuvable.

L’objet ne correspond pas au type cible, ou une propriété est une propriété d’instance mais obj a la valeur null.

Le nombre de paramètres dans index ne correspond pas au nombre de paramètres que prend la propriété indexée.

Tentative non autorisée d’accéder à une méthode privée ou protégée à l’intérieur d’une classe.

Une erreur s’est produite lors de la récupération de la valeur de la propriété. Par exemple, une valeur d’index spécifiée pour une propriété indexée est hors limites. La propriété InnerException indique la raison de l’erreur.

Remarques

Pour déterminer si une propriété est indexée, utilisez la GetIndexParameters méthode . Si le tableau résultant a 0 (zéro) éléments, la propriété n’est pas indexée.

Étant donné que les propriétés statiques appartiennent au type, et non à des objets individuels, obtenez des propriétés statiques en passant null comme argument d’objet. Par exemple, utilisez le code suivant pour obtenir la propriété statique CurrentCulture de CultureInfo :

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

Pour utiliser la GetValue méthode, commencez par obtenir la classe Type. À partir de Type, obtenez le PropertyInfo. À partir de , PropertyInfoutilisez la GetValue méthode .

Notes

À compter de .NET Framework 2.0, cette méthode peut être utilisée pour accéder aux membres non publics si l’appelant a reçu ReflectionPermission l’indicateur ReflectionPermissionFlag.RestrictedMemberAccess et si l’ensemble d’octrois des membres non publics est limité à l’ensemble d’octrois de l’appelant ou à un sous-ensemble de celui-ci. (Consultez Considérations relatives à la sécurité pour la réflexion.) Pour utiliser cette fonctionnalité, votre application doit cibler .NET Framework 3.5 ou version ultérieure.

Voir aussi

S’applique à