PropertyInfo.GetValue PropertyInfo.GetValue PropertyInfo.GetValue PropertyInfo.GetValue Method

Definizione

Restituisce il valore della proprietà di un oggetto specificato.Returns the property value of a specified object.

Overload

GetValue(Object) GetValue(Object) GetValue(Object) GetValue(Object)

Restituisce il valore della proprietà di un oggetto specificato.Returns the property value of a specified object.

GetValue(Object, Object[]) GetValue(Object, Object[]) GetValue(Object, Object[]) GetValue(Object, Object[])

Restituisce il valore della proprietà di un oggetto specificato, con valori di indice facoltativi per le proprietà indicizzate.Returns the property value of a specified object with optional index values for indexed properties.

GetValue(Object, BindingFlags, Binder, Object[], CultureInfo) GetValue(Object, BindingFlags, Binder, Object[], CultureInfo) 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.When overridden in a derived class, returns the property value of a specified object that has the specified binding, index, and culture-specific information.

GetValue(Object) GetValue(Object) GetValue(Object) GetValue(Object)

Restituisce il valore della proprietà di un oggetto specificato.Returns the property value of a specified object.

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

Parametri

obj
Object Object Object Object

Oggetto di cui verrà restituito il valore della proprietà.The object whose property value will be returned.

Restituisce

Valore della proprietà dell'oggetto specificato.The property value of the specified object.

Esempi

Nell'esempio seguente viene definita Planet una classe con due proprietà: Name, il nome del pianeta e Distancela distanza del pianeta dalla terra.The following example defines a Planet class that has two properties: Name, the name of the planet; and Distance, the planet's distance from Earth. Nell'esempio viene creata un' Planet istanza di un oggetto che rappresenta il pianeta Jupiter e lo GetPropertyValues passa a un metodo che visualizza informazioni sulle proprietà e GetValue utilizza il metodo per ottenere il valore Planet di ogni proprietà.The example instantiates a Planet object that represents the planet Jupiter and passes it to a GetPropertyValues method that displays information about the properties and uses the GetValue method to get the value of each Planet property.

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

È possibile chiamare GetValue(Object) l'overload per recuperare il valore di una proprietà non indicizzata. Se si tenta di recuperare il valore di una proprietà indicizzata, il metodo genera un' TargetParameterCountException eccezione.You call the GetValue(Object) overload to retrieve the value of a non-indexed property; if you try to retrieve the value of an indexed property, the method throws a TargetParameterCountException exception. È possibile determinare se una proprietà è indicizzata o meno chiamando il GetIndexParameters metodo.You can determine whether a property is indexed or not by calling the GetIndexParameters method. Se la lunghezza della matrice restituita ParameterInfo è zero, la proprietà non viene indicizzata.If the length of the returned ParameterInfo array is zero, the property is not indexed.

Si tratta di un metodo pratico che fornisce un'implementazione per il GetValue(Object, BindingFlags, Binder, Object[], CultureInfo) metodo astratto con BindingFlags il parametro impostato BindingFlags.Defaultsu, Binder la proprietà nullimpostata su, la matrice di oggetti dei valori nulldi indice impostati su, e l' CultureInfo oggetto impostato nullsu.This is a convenience method that provides an implementation for the abstract GetValue(Object, BindingFlags, Binder, Object[], CultureInfo) method with the BindingFlags parameter set to BindingFlags.Default, the Binder set to null, the object array of index values set to null, and the CultureInfo set to null.

GetValue(Object, Object[]) GetValue(Object, Object[]) GetValue(Object, Object[]) GetValue(Object, Object[])

Restituisce il valore della proprietà di un oggetto specificato, con valori di indice facoltativi per le proprietà indicizzate.Returns the property value of a specified object with optional index values for indexed properties.

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

Parametri

obj
Object Object Object Object

Oggetto di cui verrà restituito il valore della proprietà.The object whose property value will be returned.

index
Object[]

Valori di indice facoltativi per le proprietà indicizzate.Optional index values for indexed properties. Gli indici delle proprietà indicizzate sono in base zero.The indexes of indexed properties are zero-based. Il valore deve essere null per le proprietà non indicizzate.This value should be null for non-indexed properties.

Restituisce

Valore della proprietà dell'oggetto specificato.The property value of the specified object.

Implementazioni

Eccezioni

La matrice index non contiene il tipo di argomenti necessari.The index array does not contain the type of arguments needed.

-oppure--or- La funzione di accesso get della proprietà non è stata trovata.The property's get accessor is not found.

In .NET per app di Windows Store o nella libreria di classi portabile rilevare invece l'eccezione Exception.In the .NET for Windows Store apps or the Portable Class Library, catch Exception instead.

L'oggetto non corrisponde al tipo di destinazione oppure una proprietà è una proprietà dell'istanza, ma obj è null.The object does not match the target type, or a property is an instance property but obj is null.

Il numero di parametri in index non corrisponde al numero di parametri accettati dalla proprietà indicizzata.The number of parameters in index does not match the number of parameters the indexed property takes.

In .NET per app di Windows Store o nella libreria di classi portabile rilevare invece l'eccezione della classe di base, MemberAccessException.In the .NET for Windows Store apps or the Portable Class Library, catch the base class exception, MemberAccessException, instead.

È stato effettuato un tentativo non valido di accedere a un metodo privato o protetto all'interno di una classe.There was an illegal attempt to access a private or protected method inside a class.

Si è verificato un errore durante il recupero del valore della proprietà.An error occurred while retrieving the property value. Ad esempio, un valore di indice specificato per una proprietà indicizzata non è compreso nell'intervallo.For example, an index value specified for an indexed property is out of range. La causa di questo errore è indicata dalla proprietà InnerException.The InnerException property indicates the reason for the error.

Esempi

Nell'esempio seguente viene illustrato come ottenere il valore di una proprietà indicizzata.The following example shows how to get the value of an indexed property. La String.Chars[Int32] proprietà è la proprietà predefinita, ovvero l'indicizzatore C#in, della String classe.The String.Chars[Int32] property is the default property (the indexer in C#) of the String class.

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.To determine whether a property is indexed, use the GetIndexParameters method. Se la matrice risultante contiene 0 (zero) elementi, la proprietà non viene indicizzata.If the resulting array has 0 (zero) elements, the property is not indexed.

Si tratta di un metodo pratico che fornisce un'implementazione per il GetValue metodo astratto con BindingFlags un parametro Defaultdi, Binder l'impostazione nulldi su e CultureInfo la proprietà nullimpostata su.This is a convenience method that provides an implementation for the abstract GetValue method with a BindingFlags parameter of Default, the Binder set to null, and the CultureInfo set to null.

Poiché le proprietà statiche appartengono al tipo, non a singoli oggetti, ottengono proprietà statiche passando null come argomento dell'oggetto.Because static properties belong to the type, not individual objects, get static properties by passing null as the object argument. Usare, ad esempio, il codice seguente per ottenere la CurrentCulture proprietà statica CultureInfo di:For example, use the following code to get the static CurrentCulture property of CultureInfo :

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

Per usare il GetValue metodo, ottenere prima di tutto Typela classe.To use the GetValue method, first get the class Type. Type DaPropertyInfoottenere.From the Type, get the PropertyInfo. Da usare il GetValuemetodo. PropertyInfoFrom the PropertyInfo, use the GetValue method.

Nota

A partire da .NET Framework 2.0 Service Pack 1.NET Framework 2.0 Service Pack 1, 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 loro.Starting with the .NET Framework 2.0 Service Pack 1.NET Framework 2.0 Service Pack 1, this method can be used to access non-public members if the caller has been granted ReflectionPermission with the ReflectionPermissionFlag.RestrictedMemberAccess flag and if the grant set of the non-public members is restricted to the caller's grant set, or a subset thereof. Vedere considerazioni sulla sicurezza per la reflection.(See Security Considerations for Reflection.)

Per usare questa funzionalità, l'applicazione deve essere destinata a .NET Framework 3.5.NET Framework 3.5 o versione successiva.To use this functionality, your application should target the .NET Framework 3.5.NET Framework 3.5 or later.

Sicurezza

ReflectionPermission
Quando viene richiamato ad associazione tardiva tramite InvokeMember(String, BindingFlags, Binder, Object, Object[], ParameterModifier[], CultureInfo, String[])meccanismi come.when invoked late-bound through mechanisms such as InvokeMember(String, BindingFlags, Binder, Object, Object[], ParameterModifier[], CultureInfo, String[]). Enumerazione associata: MemberAccess.Associated enumeration: MemberAccess.

GetValue(Object, BindingFlags, Binder, Object[], CultureInfo) GetValue(Object, BindingFlags, Binder, Object[], CultureInfo) 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.When overridden in a derived class, returns the property value of a specified object that has the specified binding, index, and culture-specific information.

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

Parametri

obj
Object Object Object Object

Oggetto di cui verrà restituito il valore della proprietà.The object whose property value will be returned.

invokeAttr
BindingFlags BindingFlags BindingFlags BindingFlags

Una combinazione bit per bit dei seguenti membri di enumerazione che specificano l'attributo di chiamata: InvokeMethod, CreateInstance, Static, GetField, SetField, GetPropertye SetProperty.A bitwise combination of the following enumeration members that specify the invocation attribute: InvokeMethod, CreateInstance, Static, GetField, SetField, GetProperty, and SetProperty. È necessario specificare un attributo di chiamata appropriato.You must specify a suitable invocation attribute. Ad esempio, per richiamare un membro statico, impostare il flag Static.For example, to invoke a static member, set the Static flag.

binder
Binder Binder 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.An object that enables the binding, coercion of argument types, invocation of members, and retrieval of MemberInfo objects through reflection. Se binder è null, verrà usato il binder predefinito.If binder is null, the default binder is used.

index
Object[]

Valori di indice facoltativi per le proprietà indicizzate.Optional index values for indexed properties. Il valore deve essere null per le proprietà non indicizzate.This value should be null for non-indexed properties.

culture
CultureInfo CultureInfo CultureInfo CultureInfo

Impostazioni cultura in base alle quali deve essere localizzata la risorsa.The culture for which the resource is to be localized. Se la risorsa non viene localizzata con queste impostazioni cultura, la proprietà Parent verrà successivamente chiamata in cerca di una corrispondenza.If the resource is not localized for this culture, the Parent property will be called successively in search of a match. Se questo valore è null, le informazioni specifiche delle impostazioni cultura vengono ottenute dalla proprietà CurrentUICulture.If this value is null, the culture-specific information is obtained from the CurrentUICulture property.

Restituisce

Valore della proprietà dell'oggetto specificato.The property value of the specified object.

Implementazioni

Eccezioni

La matrice index non contiene il tipo di argomenti necessari.The index array does not contain the type of arguments needed.

-oppure--or- La funzione di accesso get della proprietà non è stata trovata.The property's get accessor is not found.

L'oggetto non corrisponde al tipo di destinazione oppure una proprietà è una proprietà dell'istanza, ma obj è null.The object does not match the target type, or a property is an instance property but obj is null.

Il numero di parametri in index non corrisponde al numero di parametri accettati dalla proprietà indicizzata.The number of parameters in index does not match the number of parameters the indexed property takes.

È stato effettuato un tentativo non valido di accedere a un metodo privato o protetto all'interno di una classe.There was an illegal attempt to access a private or protected method inside a class.

Si è verificato un errore durante il recupero del valore della proprietà.An error occurred while retrieving the property value. Ad esempio, un valore di indice specificato per una proprietà indicizzata non è compreso nell'intervallo.For example, an index value specified for an indexed property is out of range. La causa di questo errore è indicata dalla proprietà InnerException.The InnerException property indicates the reason for the error.

Commenti

Per determinare se una proprietà è indicizzata, usare il GetIndexParameters metodo.To determine whether a property is indexed, use the GetIndexParameters method. Se la matrice risultante contiene 0 (zero) elementi, la proprietà non viene indicizzata.If the resulting array has 0 (zero) elements, the property is not indexed.

Poiché le proprietà statiche appartengono al tipo, non a singoli oggetti, ottengono proprietà statiche passando null come argomento dell'oggetto.Because static properties belong to the type, not individual objects, get static properties by passing null as the object argument. Usare, ad esempio, il codice seguente per ottenere la CurrentCulture proprietà statica CultureInfo di:For example, use the following code to get the static CurrentCulture property of CultureInfo :

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

Per usare il GetValue metodo, ottenere prima di tutto Typela classe.To use the GetValue method, first get the class Type. Type DaPropertyInfoottenere.From the Type, get the PropertyInfo. Da usare il GetValuemetodo. PropertyInfoFrom the PropertyInfo, use the GetValue method.

Nota

A partire da .NET Framework 2.0 Service Pack 1.NET Framework 2.0 Service Pack 1, 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 loro.Starting with the .NET Framework 2.0 Service Pack 1.NET Framework 2.0 Service Pack 1, this method can be used to access non-public members if the caller has been granted ReflectionPermission with the ReflectionPermissionFlag.RestrictedMemberAccess flag and if the grant set of the non-public members is restricted to the caller's grant set, or a subset thereof. Vedere considerazioni sulla sicurezza per la reflection.(See Security Considerations for Reflection.)

Per usare questa funzionalità, l'applicazione deve essere destinata a .NET Framework 3.5.NET Framework 3.5 o versione successiva.To use this functionality, your application should target the .NET Framework 3.5.NET Framework 3.5 or later.

Sicurezza

ReflectionPermission
Quando viene richiamato ad associazione tardiva tramite InvokeMember(String, BindingFlags, Binder, Object, Object[], ParameterModifier[], CultureInfo, String[])meccanismi come.when invoked late-bound through mechanisms such as InvokeMember(String, BindingFlags, Binder, Object, Object[], ParameterModifier[], CultureInfo, String[]). Enumerazione associata: MemberAccess.Associated enumeration: MemberAccess.

Vedi anche

Si applica a