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 Wert der Eigenschaft für das angegebene Objekt mit optionalen Indexwerten für indizierte Eigenschaften fest.

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

Gibt beim Überschreiben in einer abgeleiteten Klasse den Eigenschaftswert eines angegebenen Objekts zurück, das die angegebene Bindung, den Index und kulturabhängige Informationen besitzt.

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 über zwei Eigenschaften verfügt: Name, den Namen des Planeten und Distance, die Entfernung des Planeten von der Erde. Das Beispiel instanziiert ein Planet Objekt, das den Planeten Jupiter darstellt, und übergibt es an eine GetPropertyValues Methode, die Informationen zu den Eigenschaften anzeigt, und verwendet die GetValue -Methode, um den Wert jeder 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 Ausnahme aus TargetParameterCountException . Sie können bestimmen, ob eine Eigenschaft indiziert ist oder nicht, indem Sie die GetIndexParameters -Methode aufrufen. Wenn die Länge des zurückgegebenen ParameterInfo Arrays 0 ist, wird die Eigenschaft nicht indiziert.

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

Gilt für:

GetValue(Object, Object[])

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

Gibt den Wert der Eigenschaft für das angegebene Objekt mit optionalen Indexwerten für indizierte Eigenschaften fest.

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 indizierter Eigenschaften sind nullbasiert. Dieser Wert sollte bei nicht indizierten Eigenschaften null sein.

Gibt zurück

Der -Eigenschaftswert des angegebenen Objekts.

Implementiert

Ausnahmen

Das index-Array enthält Argumente, die nicht den benötigten Typ haben.

- oder -

Der get-Accessor der Eigenschaft wurde nicht gefunden.

Das Objekt entspricht nicht dem Zieltyp, oder eine Eigenschaft ist eine Instanzeigenschaft, aber obj ist null.

Hinweis: In .NET für Windows Store-Apps oder der portablen Klassenbibliothek sollten Sie stattdessen abfangen Exception .

Die Anzahl von Parametern in index entspricht nicht der Anzahl von Parametern, die die indizierte Eigenschaft akzeptiert.

Es wurde unzulässigerweise versucht, auf eine private oder geschützte Methode innerhalb einer Klasse zuzugreifen.

Hinweis: Erfassen Sie in .NET für Windows Store-Apps oder der portablen Klassenbibliothek 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 gültigen Bereichs. Die InnerException-Eigenschaft gibt die Ursache des Fehlers an.

Beispiele

Das folgende Beispiel zeigt, wie Sie den Wert einer indizierten Eigenschaft abrufen. 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

Verwenden Sie die GetIndexParameters -Methode, um zu bestimmen, ob eine Eigenschaft indiziert ist. Wenn das resultierende Array über 0 (null) Elemente verfügt, wird die Eigenschaft nicht indiziert.

Dies ist eine Komfortmethode, die eine Implementierung für die abstrakte GetValue Methode mit einem BindingFlags Parameter von Defaultbereitstellt, der Binder auf nullfestgelegt ist und auf CultureInfo festgelegt ist null.

Da statische Eigenschaften zum Typ gehören, nicht einzelne Objekte, rufen Sie statische Eigenschaften ab, indem Sie als Objektargument übergeben null . 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 aus die Typeab PropertyInfo. Verwenden Sie GetValue aus die PropertyInfo-Methode.

Hinweis

Ab .NET Framework 2.0 kann diese Methode verwendet werden, um auf nicht öffentliche Member zuzugreifen, wenn dem Aufrufer das ReflectionPermissionFlag.RestrictedMemberAccess Flag gewährt ReflectionPermission wurde und wenn der Grant-Satz der nicht öffentlichen Member auf den Grant-Satz des Aufrufers oder eine Teilmenge davon beschränkt ist. (Weitere Informationen finden Sie unter Sicherheitsüberlegungen.) Um diese Funktionalität zu verwenden, sollte Ihre Anwendung auf .NET Framework 3.5 oder höher ausgerichtet sein.

Gilt für:

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

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

Gibt beim Überschreiben in einer abgeleiteten Klasse den Eigenschaftswert eines angegebenen Objekts zurück, das die angegebene Bindung, den Index und kulturabhängige Informationen besitzt.

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 Aufrufattribut angeben: InvokeMethod, CreateInstance, Static, GetField, SetField, GetProperty und SetProperty. Es muss ein geeignetes Aufrufattribut angegeben werden. Um beispielsweise einen statischen Member aufzurufen, legen Sie das Static-Flag fest.

binder
Binder

Ein Objekt, das die Bindung, die Umwandlung von Argumenttypen, das Aufrufen von Membern und das Abrufen von MemberInfo-Objekten über Reflektion ermöglicht. Wenn binder den Wert null aufweist, wird der Standardbinder verwendet.

index
Object[]

Optionale Indexwerte für indizierte Eigenschaften. Dieser Wert sollte bei nicht indizierten Eigenschaften null sein.

culture
CultureInfo

Die Kultur, für die die Ressource lokalisiert werden soll. Die Parent-Eigenschaft wird in der Folge für die Suche nach einer Übereinstimmung aufgerufen, wenn die Ressource nicht für diese Kultur lokalisiert wurde. Wenn dieser Wert null ist, wird die kulturspezifische Information aus der CurrentUICulture-Eigenschaft abgerufen.

Gibt zurück

Der -Eigenschaftswert des angegebenen Objekts.

Implementiert

Ausnahmen

Das index-Array enthält Argumente, die nicht den benötigten Typ haben.

- oder -

Der get-Accessor der Eigenschaft wurde nicht gefunden.

Das Objekt entspricht nicht dem Zieltyp, oder eine Eigenschaft ist eine Instanzeigenschaft, aber obj ist null.

Die Anzahl von Parametern in index entspricht nicht der Anzahl von Parametern, die die indizierte Eigenschaft akzeptiert.

Es wurde unzulässigerweise versucht, 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 gültigen Bereichs. Die InnerException-Eigenschaft gibt die Ursache des Fehlers an.

Hinweise

Verwenden Sie die GetIndexParameters -Methode, um zu bestimmen, ob eine Eigenschaft indiziert ist. Wenn das resultierende Array über 0 (null) Elemente verfügt, wird die Eigenschaft nicht indiziert.

Da statische Eigenschaften zum Typ gehören, nicht einzelne Objekte, rufen Sie statische Eigenschaften ab, indem Sie als Objektargument übergeben null . 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 aus die Typeab PropertyInfo. Verwenden Sie GetValue aus die PropertyInfo-Methode.

Hinweis

Ab .NET Framework 2.0 kann diese Methode verwendet werden, um auf nicht öffentliche Member zuzugreifen, wenn dem Aufrufer das ReflectionPermissionFlag.RestrictedMemberAccess Flag gewährt ReflectionPermission wurde und wenn der Grant-Satz der nicht öffentlichen Member auf den Grant-Satz des Aufrufers oder eine Teilmenge davon beschränkt ist. (Weitere Informationen finden Sie unter Sicherheitsüberlegungen.) Um diese Funktionalität zu verwenden, sollte Ihre Anwendung auf .NET Framework 3.5 oder höher ausgerichtet sein.

Weitere Informationen

Gilt für: