PropertyInfo.GetValue Methode
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
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 null
festgelegt ist, das Objektarray von Indexwerten, die auf null
festgelegt sind, und die CultureInfo auf null
festgelegt 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 null
festgelegten Binder
und dem CultureInfo
auf null
festgelegt.
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 Type
ab. Rufen Sie vom Type
die PropertyInfo
ab. Verwenden Sie aus dem PropertyInfo
die 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
, GetProperty
und 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 binder
null
ist, 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 null
ist, 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 Type
ab. Rufen Sie vom Type
die PropertyInfo
ab. Verwenden Sie aus dem PropertyInfo
die 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.