PropertyInfo.GetValue Metodo

Definizione

Restituisce il valore della proprietà di un oggetto specificato.

Overload

GetValue(Object)

Restituisce il valore della proprietà di un oggetto specificato.

GetValue(Object, Object[])

Restituisce il valore della proprietà di un oggetto specificato, con valori di indice facoltativi per le proprietà indicizzate.

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

Una volta eseguito l'override in una classe derivata, restituisce il valore di proprietà di un oggetto specificato con l'associazione, l'indice e le informazioni specifiche delle impostazioni cultura specificate.

GetValue(Object)

Origine:
PropertyInfo.cs
Origine:
PropertyInfo.cs
Origine:
PropertyInfo.cs

Restituisce il valore della proprietà di un oggetto specificato.

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

Parametri

obj
Object

Oggetto di cui verrà restituito il valore della proprietà.

Restituisce

Valore della proprietà dell'oggetto specificato.

Esempio

Nell'esempio seguente viene definita una Planet classe con due proprietà: Name, il nome del pianeta e Distancela distanza del pianeta dalla Terra. L'esempio crea un'istanza di un oggetto che rappresenta il pianeta Giove e lo passa a un PlanetGetPropertyValues metodo che visualizza informazioni sulle proprietà e usa il metodo per ottenere il GetValue valore di ogni Planet proprietà.

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

Commenti

Si chiama l'overload GetValue(Object) per recuperare il valore di una proprietà non indicizzata. Se si tenta di recuperare il valore di una proprietà indicizzata, il metodo genera un'eccezione TargetParameterCountException . È possibile determinare se una proprietà è indicizzata o meno chiamando il GetIndexParameters metodo. Se la lunghezza della matrice restituita è zero, la proprietà non viene indicizzata ParameterInfo .

Si tratta di un metodo pratico che fornisce un'implementazione per il metodo astratta con il BindingFlags parametro impostato su BindingFlags.Default, l'insieme Binder su null, la matrice di oggetti dei valori di indice impostata su nulle il CultureInfo set su null.GetValue(Object, BindingFlags, Binder, Object[], CultureInfo)

Si applica a

GetValue(Object, Object[])

Origine:
PropertyInfo.cs
Origine:
PropertyInfo.cs
Origine:
PropertyInfo.cs

Restituisce il valore della proprietà di un oggetto specificato, con valori di indice facoltativi per le proprietà indicizzate.

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

Parametri

obj
Object

Oggetto di cui verrà restituito il valore della proprietà.

index
Object[]

Valori di indice facoltativi per le proprietà indicizzate. Gli indici delle proprietà indicizzate sono in base zero. Il valore deve essere null per le proprietà non indicizzate.

Restituisce

Valore della proprietà dell'oggetto specificato.

Implementazioni

Eccezioni

La matrice index non contiene il tipo di argomenti necessari.

-oppure-

La funzione di accesso get della proprietà non è stata trovata.

L'oggetto non corrisponde al tipo di destinazione oppure una proprietà è una proprietà dell'istanza, ma obj è null.

Nota: in .NET per le app di Windows Store o la libreria di classi portabile, rilevareException invece.

Il numero di parametri in index non corrisponde al numero di parametri accettati dalla proprietà indicizzata.

È stato effettuato un tentativo non valido di accedere a un metodo privato o protetto all'interno di una classe.

Nota: in .NET per le app di Windows Store o la libreria di classi portabili, rilevare invece l'eccezione della classe di base, , MemberAccessException.

Si è verificato un errore durante il recupero del valore della proprietà. Ad esempio, un valore di indice specificato per una proprietà indicizzata non è compreso nell'intervallo. La causa di questo errore è indicata dalla proprietà InnerException.

Esempio

Nell'esempio seguente viene illustrato come ottenere il valore di una proprietà indicizzata. La String.Chars[] proprietà è la proprietà predefinita (indicizzatore in C#) della 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

Commenti

Per determinare se una proprietà è indicizzata, usare il GetIndexParameters metodo . Se la matrice risultante ha 0 (zero), la proprietà non viene indicizzata.

Si tratta di un metodo pratico che fornisce un'implementazione per il metodo astratta GetValue con un BindingFlags parametro di Default, il Binder set su nulle il CultureInfo set su null.

Poiché le proprietà statiche appartengono al tipo, non ai singoli oggetti, ottenere proprietà statiche passando null come argomento dell'oggetto. Ad esempio, usare il codice seguente per ottenere la proprietà statica CurrentCulture di CultureInfo :

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

Per usare il metodo, ottenere prima di tutto GetValue la classe Type. Dall'oggetto , ottenere l'oggetto TypePropertyInfo. PropertyInfoDa , usare il GetValue metodo .

Nota

A partire da .NET Framework 2.0, questo metodo può essere usato per accedere a membri non pubblici se il chiamante è stato concesso ReflectionPermission con il ReflectionPermissionFlag.RestrictedMemberAccess flag e se il set di concessione dei membri non pubblici è limitato al set di concessione del chiamante o a un subset. Vedere Considerazioni sulla sicurezza per Reflection. Per usare questa funzionalità, l'applicazione deve essere di destinazione .NET Framework 3.5 o successiva.

Si applica a

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

Origine:
PropertyInfo.cs
Origine:
PropertyInfo.cs
Origine:
PropertyInfo.cs

Una volta eseguito l'override in una classe derivata, restituisce il valore di proprietà di un oggetto specificato con l'associazione, l'indice e le informazioni specifiche delle impostazioni cultura specificate.

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

Parametri

obj
Object

Oggetto di cui verrà restituito il valore della proprietà.

invokeAttr
BindingFlags

Una combinazione bit per bit dei seguenti membri di enumerazione che specificano l'attributo di chiamata: InvokeMethod, CreateInstance, Static, GetField, SetField, GetPropertye SetProperty. È necessario specificare un attributo di chiamata appropriato. Ad esempio, per richiamare un membro statico, impostare il flag Static.

binder
Binder

Oggetto che consente l'associazione, la coercizione di tipi di argomento, la chiamata di membri e il recupero di oggetti MemberInfo tramite la reflection. Se binder è null, verrà usato il binder predefinito.

index
Object[]

Valori di indice facoltativi per le proprietà indicizzate. Il valore deve essere null per le proprietà non indicizzate.

culture
CultureInfo

Impostazioni cultura in base alle quali deve essere localizzata la risorsa. Se la risorsa non viene localizzata con queste impostazioni cultura, la proprietà Parent verrà successivamente chiamata in cerca di una corrispondenza. Se questo valore è null, le informazioni specifiche delle impostazioni cultura vengono ottenute dalla proprietà CurrentUICulture.

Restituisce

Valore della proprietà dell'oggetto specificato.

Implementazioni

Eccezioni

La matrice index non contiene il tipo di argomenti necessari.

-oppure-

La funzione di accesso get della proprietà non è stata trovata.

L'oggetto non corrisponde al tipo di destinazione oppure una proprietà è una proprietà dell'istanza, ma obj è null.

Il numero di parametri in index non corrisponde al numero di parametri accettati dalla proprietà indicizzata.

È stato effettuato un tentativo non valido di accedere a un metodo privato o protetto all'interno di una classe.

Si è verificato un errore durante il recupero del valore della proprietà. Ad esempio, un valore di indice specificato per una proprietà indicizzata non è compreso nell'intervallo. La causa di questo errore è indicata dalla proprietà InnerException.

Commenti

Per determinare se una proprietà è indicizzata, usare il GetIndexParameters metodo . Se la matrice risultante ha 0 (zero), la proprietà non viene indicizzata.

Poiché le proprietà statiche appartengono al tipo, non ai singoli oggetti, ottenere proprietà statiche passando null come argomento dell'oggetto. Ad esempio, usare il codice seguente per ottenere la proprietà statica CurrentCulture di CultureInfo :

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

Per usare il metodo, ottenere prima di tutto GetValue la classe Type. Dall'oggetto , ottenere l'oggetto TypePropertyInfo. PropertyInfoDa , usare il GetValue metodo .

Nota

A partire da .NET Framework 2.0, questo metodo può essere usato per accedere a membri non pubblici se il chiamante è stato concesso ReflectionPermission con il ReflectionPermissionFlag.RestrictedMemberAccess flag e se il set di concessione dei membri non pubblici è limitato al set di concessione del chiamante o a un subset. Vedere Considerazioni sulla sicurezza per Reflection. Per usare questa funzionalità, l'applicazione deve essere di destinazione .NET Framework 3.5 o successiva.

Vedi anche

Si applica a