Freigeben über


PropertyInfo.GetValue Methode

Definition

Gibt den Eigenschaftswert eines angegebenen Objekts zurück.

Überlädt

GetValue(Object)

Gibt den Eigenschaftswert eines angegebenen Objekts zurück.

GetValue(Object, Object[])

Gibt den Eigenschaftswert eines angegebenen Objekts mit optionalen Indexwerten für indizierte Eigenschaften zurück.

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

Wenn eine abgeleitete Klasse überschrieben wird, wird der Eigenschaftswert eines angegebenen Objekts zurückgegeben, das die angegebenen Bindungs-, Index- und kulturspezifischen Informationen enthält.

GetValue(Object)

Quelle:
PropertyInfo.cs
Quelle:
PropertyInfo.cs
Quelle:
PropertyInfo.cs

Gibt den Eigenschaftswert eines angegebenen Objekts zurück.

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

Parameter

obj
Object

Das Objekt, dessen Eigenschaftswert zurückgegeben wird.

Gibt zurück

Der Eigenschaftswert des angegebenen Objekts.

Beispiele

Im folgenden Beispiel wird eine Planet Klasse definiert, die zwei Eigenschaften aufweist: Name, der Name des Planeten; und Distance, die Entfernung des Planeten von der Erde. Im Beispiel wird ein Planet-Objekt instanziiert, das den Planeten Jupiter darstellt, und an eine GetPropertyValues-Methode übergeben, die Informationen zu den Eigenschaften anzeigt und die GetValue-Methode verwendet, um den Wert der einzelnen Planet-Eigenschaft abzurufen.

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

Hinweise

Sie rufen die GetValue(Object) Überladung auf, um den Wert einer nicht indizierten Eigenschaft abzurufen; Wenn Sie versuchen, den Wert einer indizierten Eigenschaft abzurufen, löst die Methode eine TargetParameterCountException Ausnahme aus. Sie können ermitteln, ob eine Eigenschaft indiziert ist oder nicht, indem Sie die GetIndexParameters-Methode aufrufen. Wenn die Länge des zurückgegebenen ParameterInfo Arrays null ist, wird die Eigenschaft nicht indiziert.

Dies ist eine Komfortmethode, die eine Implementierung für die abstrakte GetValue(Object, BindingFlags, Binder, Object[], CultureInfo)-Methode bereitstellt, wobei der BindingFlags Parameter auf BindingFlags.Defaultfestgelegt ist, die Binder auf nullfestgelegt ist, das Objektarray von Indexwerten, die auf nullfestgelegt sind, und die CultureInfo auf nullfestgelegt ist.

Gilt für:

GetValue(Object, Object[])

Quelle:
PropertyInfo.cs
Quelle:
PropertyInfo.cs
Quelle:
PropertyInfo.cs

Gibt den Eigenschaftswert eines angegebenen Objekts mit optionalen Indexwerten für indizierte Eigenschaften zurück.

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

Parameter

obj
Object

Das Objekt, dessen Eigenschaftswert zurückgegeben wird.

index
Object[]

Optionale Indexwerte für indizierte Eigenschaften. Die Indizes der indizierten Eigenschaften sind nullbasiert. Dieser Wert sollte für nicht indizierte Eigenschaften null werden.

Gibt zurück

Der Eigenschaftswert des angegebenen Objekts.

Implementiert

Ausnahmen

Das index Array enthält nicht den erforderlichen Argumenttyp.

-oder-

Der get Accessor der Eigenschaft wurde nicht gefunden.

Das Objekt stimmt nicht mit dem Zieltyp überein, oder eine Eigenschaft ist eine Instanzeigenschaft, aber obj ist null.

Hinweis: In .NET für Windows Store-Apps oder die Portable Class Library, erfassen Sie stattdessen Exception.

Die Anzahl der Parameter in index stimmt nicht mit der Anzahl der Parameter überein, die von der indizierten Eigenschaft verwendet werden.

Es gab einen unzulässigen Versuch, auf eine private oder geschützte Methode innerhalb einer Klasse zuzugreifen.

Hinweis: In .NET für Windows Store-Apps oder der Portable Class Library, erfassen Sie stattdessen die Basisklassen-Ausnahme, MemberAccessException.

Fehler beim Abrufen des Eigenschaftswerts. Beispielsweise liegt ein indexwert, der für eine indizierte Eigenschaft angegeben ist, außerhalb des zulässigen Bereichs. Die InnerException-Eigenschaft gibt den Grund für den Fehler an.

Beispiele

Das folgende Beispiel zeigt, wie der Wert einer indizierten Eigenschaft abgerufen wird. Die String.Chars[]-Eigenschaft ist die Standardeigenschaft (der Indexer in C#) der String Klasse.

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

Hinweise

Um zu ermitteln, ob eine Eigenschaft indiziert ist, verwenden Sie die GetIndexParameters-Methode. Wenn das resultierende Array 0 (Null)-Elemente enthält, wird die Eigenschaft nicht indiziert.

Dies ist eine Komfortmethode, die eine Implementierung für die abstrakte GetValue-Methode mit einem BindingFlags Parameter von Default, dem auf nullfestgelegten Binder und dem CultureInfo auf nullfestgelegt.

Da statische Eigenschaften zum Typ gehören, nicht einzelne Objekte, rufen Sie statische Eigenschaften ab, indem Sie null als Objektargument übergeben. Verwenden Sie beispielsweise den folgenden Code, um die statische CurrentCulture Eigenschaft von CultureInfo abzurufen:

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

Um die GetValue-Methode zu verwenden, rufen Sie zuerst die Klasse Typeab. Rufen Sie vom Typedie PropertyInfoab. Verwenden Sie aus dem PropertyInfodie GetValue-Methode.

Anmerkung

Ab .NET Framework 2.0 kann diese Methode verwendet werden, um auf nicht öffentliche Member zuzugreifen, wenn der Aufrufer ReflectionPermission mit dem flag ReflectionPermissionFlag.RestrictedMemberAccess erteilt wurde und wenn der Grant-Satz der nicht öffentlichen Member auf den Grant-Satz des Aufrufers oder eine Teilmenge davon beschränkt ist. (Siehe Sicherheitsüberlegungen für Reflection.) Um diese Funktionalität zu verwenden, sollte Ihre Anwendung auf .NET Framework 3.5 oder höher abzielen.

Gilt für:

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

Quelle:
PropertyInfo.cs
Quelle:
PropertyInfo.cs
Quelle:
PropertyInfo.cs

Wenn eine abgeleitete Klasse überschrieben wird, wird der Eigenschaftswert eines angegebenen Objekts zurückgegeben, das die angegebenen Bindungs-, Index- und kulturspezifischen Informationen enthält.

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

Parameter

obj
Object

Das Objekt, dessen Eigenschaftswert zurückgegeben wird.

invokeAttr
BindingFlags

Eine bitweise Kombination der folgenden Enumerationsmember, die das Aufruf-Attribut angeben: InvokeMethod, CreateInstance, Static, GetField, SetField, GetPropertyund SetProperty. Sie müssen ein geeignetes Aufruf-Attribut angeben. Um beispielsweise ein statisches Element aufzurufen, legen Sie das Static Flag fest.

binder
Binder

Ein Objekt, das die Bindung, die Koersion von Argumenttypen, den Aufruf von Membern und das Abrufen von MemberInfo Objekten durch Spiegelung ermöglicht. Wenn bindernullist, wird der Standardordner verwendet.

index
Object[]

Optionale Indexwerte für indizierte Eigenschaften. Dieser Wert sollte für nicht indizierte Eigenschaften null werden.

culture
CultureInfo

Die Kultur, für die die Ressource lokalisiert werden soll. Wenn die Ressource für diese Kultur nicht lokalisiert ist, wird die Parent-Eigenschaft nacheinander nach einer Übereinstimmung aufgerufen. Wenn dieser Wert nullist, werden die kulturspezifischen Informationen aus der CurrentUICulture-Eigenschaft abgerufen.

Gibt zurück

Der Eigenschaftswert des angegebenen Objekts.

Implementiert

Ausnahmen

Das index Array enthält nicht den erforderlichen Argumenttyp.

-oder-

Der get Accessor der Eigenschaft wurde nicht gefunden.

Das Objekt stimmt nicht mit dem Zieltyp überein, oder eine Eigenschaft ist eine Instanzeigenschaft, aber obj ist null.

Die Anzahl der Parameter in index stimmt nicht mit der Anzahl der Parameter überein, die von der indizierten Eigenschaft verwendet werden.

Es gab einen unzulässigen Versuch, auf eine private oder geschützte Methode innerhalb einer Klasse zuzugreifen.

Fehler beim Abrufen des Eigenschaftswerts. Beispielsweise liegt ein indexwert, der für eine indizierte Eigenschaft angegeben ist, außerhalb des zulässigen Bereichs. Die InnerException-Eigenschaft gibt den Grund für den Fehler an.

Hinweise

Um zu ermitteln, ob eine Eigenschaft indiziert ist, verwenden Sie die GetIndexParameters-Methode. Wenn das resultierende Array 0 (Null)-Elemente enthält, wird die Eigenschaft nicht indiziert.

Da statische Eigenschaften zum Typ gehören, nicht einzelne Objekte, rufen Sie statische Eigenschaften ab, indem Sie null als Objektargument übergeben. Verwenden Sie beispielsweise den folgenden Code, um die statische CurrentCulture Eigenschaft von CultureInfo abzurufen:

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

Um die GetValue-Methode zu verwenden, rufen Sie zuerst die Klasse Typeab. Rufen Sie vom Typedie PropertyInfoab. Verwenden Sie aus dem PropertyInfodie GetValue-Methode.

Anmerkung

Ab .NET Framework 2.0 kann diese Methode verwendet werden, um auf nicht öffentliche Member zuzugreifen, wenn der Aufrufer ReflectionPermission mit dem flag ReflectionPermissionFlag.RestrictedMemberAccess erteilt wurde und wenn der Grant-Satz der nicht öffentlichen Member auf den Grant-Satz des Aufrufers oder eine Teilmenge davon beschränkt ist. (Siehe Sicherheitsüberlegungen für Reflection.) Um diese Funktionalität zu verwenden, sollte Ihre Anwendung auf .NET Framework 3.5 oder höher abzielen.

Weitere Informationen

Gilt für: