Condividi tramite


PropertyInfo.GetValue Metodo

Definizione

Restituisce il valore della proprietà di un oggetto specificato.

Overload

Nome Descrizione
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)

Quando sottoposto a override in una classe derivata, restituisce il valore della proprietà di un oggetto specificato con le informazioni specifiche per l'associazione, l'indice e le impostazioni cultura specificate.

GetValue(Object)

Origine:
PropertyInfo.cs
Origine:
PropertyInfo.cs
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 il cui valore della proprietà verrà restituito.

Valori restituiti

Valore della proprietà dell'oggetto specificato.

Esempio

L'esempio seguente definisce una Planet classe con due proprietà: Name, il nome del pianeta e Distance, la distanza del pianeta dalla Terra. Nell'esempio viene creata un'istanza di un Planet oggetto che rappresenta il pianeta Giove e lo passa a un GetPropertyValues metodo che visualizza informazioni sulle proprietà e usa il GetValue metodo per ottenere il 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

Chiamare 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 ParameterInfo è zero, la proprietà non viene indicizzata.

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

Si applica a

GetValue(Object, Object[])

Origine:
PropertyInfo.cs
Origine:
PropertyInfo.cs
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 il cui valore della proprietà verrà restituito.

index
Object[]

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

Valori restituiti

Valore della proprietà dell'oggetto specificato.

Implementazioni

Eccezioni

La index matrice non contiene il tipo di argomenti necessari.

oppure

La funzione di accesso della get proprietà non viene trovata.

L'oggetto non corrisponde al tipo di destinazione o 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.

Si è verificato un tentativo non valido di accedere a un metodo privato o protetto all'interno di una classe.

Errore durante il recupero del valore della proprietà. Ad esempio, un valore di indice specificato per una proprietà indicizzata non è compreso nell'intervallo. La InnerException proprietà indica il motivo dell'errore.

Esempio

Nell'esempio seguente viene illustrato come ottenere il valore di una proprietà indicizzata. La String.Chars[] proprietà è la proprietà predefinita (l'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, utilizzare 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 astratto con un BindingFlags parametro di Default, l'oggetto Binder impostato su nulle l'oggetto CultureInfo impostato su null.GetValue

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 GetValue metodo , ottenere prima di tutto la classe Type. TypeDa ottenere .PropertyInfo PropertyInfoDa usare il GetValue metodo .

Annotazioni

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 concessioni dei membri non pubblici è limitato al set di concessioni del chiamante o a un subset. Vedere Security Considerations for Reflection.) Per usare questa funzionalità, l'applicazione deve avere come destinazione .NET Framework 3.5 o versione successiva.

Si applica a

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

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

Quando sottoposto a override in una classe derivata, restituisce il valore della proprietà di un oggetto specificato con le informazioni specifiche per l'associazione, l'indice e le 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 il cui valore della proprietà verrà restituito.

invokeAttr
BindingFlags

Combinazione bit per bit dei membri di enumerazione seguenti che specificano l'attributo di chiamata: InvokeMethod, SetFieldCreateInstanceGetFieldStatic, GetProperty, e .SetProperty È necessario specificare un attributo di chiamata appropriato. Ad esempio, per richiamare un membro statico, impostare il Static flag .

binder
Binder

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

index
Object[]

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

culture
CultureInfo

Impostazioni cultura per cui la risorsa deve essere localizzata. Se la risorsa non è localizzata per queste impostazioni cultura, la Parent proprietà verrà chiamata successivamente nella ricerca di una corrispondenza. Se questo valore è null, le informazioni specifiche delle CurrentUICulture impostazioni cultura vengono ottenute dalla proprietà .

Valori restituiti

Valore della proprietà dell'oggetto specificato.

Implementazioni

Eccezioni

La index matrice non contiene il tipo di argomenti necessari.

oppure

La funzione di accesso della get proprietà non viene trovata.

L'oggetto non corrisponde al tipo di destinazione o 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.

Si è verificato un tentativo non valido di accedere a un metodo privato o protetto all'interno di una classe.

Errore durante il recupero del valore della proprietà. Ad esempio, un valore di indice specificato per una proprietà indicizzata non è compreso nell'intervallo. La InnerException proprietà indica il motivo dell'errore.

Commenti

Per determinare se una proprietà è indicizzata, utilizzare 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 GetValue metodo , ottenere prima di tutto la classe Type. TypeDa ottenere .PropertyInfo PropertyInfoDa usare il GetValue metodo .

Annotazioni

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 concessioni dei membri non pubblici è limitato al set di concessioni del chiamante o a un subset. Vedere Security Considerations for Reflection.) Per usare questa funzionalità, l'applicazione deve avere come destinazione .NET Framework 3.5 o versione successiva.

Vedi anche

Si applica a