PropertyInfo.GetValue Metoda
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Zwraca wartość właściwości określonego obiektu.
Przeciążenia
GetValue(Object) |
Zwraca wartość właściwości określonego obiektu. |
GetValue(Object, Object[]) |
Zwraca wartość właściwości określonego obiektu z opcjonalnymi wartościami indeksu dla indeksowanych właściwości. |
GetValue(Object, BindingFlags, Binder, Object[], CultureInfo) |
Po zastąpieniu w klasie pochodnej zwraca wartość właściwości określonego obiektu, który ma określone powiązanie, indeks i informacje specyficzne dla kultury. |
GetValue(Object)
- Źródło:
- PropertyInfo.cs
- Źródło:
- PropertyInfo.cs
- Źródło:
- PropertyInfo.cs
Zwraca wartość właściwości określonego obiektu.
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
Parametry
- obj
- Object
Obiekt, którego wartość właściwości zostanie zwrócona.
Zwraca
Wartość właściwości określonego obiektu.
Przykłady
W poniższym przykładzie zdefiniowano klasę Planet
, która ma dwie właściwości: Name
, nazwę planety i Distance
odległość planety od Ziemi. Przykład tworzy wystąpienie obiektu, który reprezentuje planetę Planet
Jowisz i przekazuje go do GetPropertyValues
metody, która wyświetla informacje o właściwościach i używa GetValue metody w celu uzyskania wartości każdej Planet
właściwości.
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
Uwagi
GetValue(Object) Wywołasz przeciążenie, aby pobrać wartość właściwości nieindeksowanej. Jeśli spróbujesz pobrać wartość indeksowanej właściwości, metoda zgłasza TargetParameterCountException wyjątek. Można określić, czy właściwość jest indeksowana, czy nie, wywołując metodę GetIndexParameters . Jeśli długość zwracanej ParameterInfo tablicy wynosi zero, właściwość nie jest indeksowana.
Jest to metoda wygody, która zapewnia implementację metody abstrakcyjnej GetValue(Object, BindingFlags, Binder, Object[], CultureInfo) z parametrem BindingFlags ustawionym na BindingFlags.Default, Binder ustawioną null
na , tablicą obiektów wartości indeksu ustawioną na null
, i CultureInfo ustawioną na null
.
Dotyczy
GetValue(Object, Object[])
- Źródło:
- PropertyInfo.cs
- Źródło:
- PropertyInfo.cs
- Źródło:
- PropertyInfo.cs
Zwraca wartość właściwości określonego obiektu z opcjonalnymi wartościami indeksu dla indeksowanych właściwości.
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
Parametry
- obj
- Object
Obiekt, którego wartość właściwości zostanie zwrócona.
- index
- Object[]
Opcjonalne wartości indeksu dla właściwości indeksowanych. Indeksy indeksowanych właściwości są oparte na zera. Ta wartość powinna być null
przeznaczona dla właściwości nieindeksowanych.
Zwraca
Wartość właściwości określonego obiektu.
Implementuje
Wyjątki
Tablica index
nie zawiera wymaganego typu argumentów.
-lub-
Nie można odnaleźć metody dostępu właściwości get
.
Obiekt nie jest zgodny z typem docelowym lub właściwość jest właściwością wystąpienia, ale obj
jest null
.
Uwaga: w programie .NET dla aplikacji ze Sklepu Windows lub w przenośnej bibliotece klas przechwyć Exception zamiast tego.
Liczba parametrów w elemecie index
nie jest zgodna z liczbą parametrów pobieraną przez indeksowaną właściwość.
W klasie wystąpiła nielegalna próba uzyskania dostępu do prywatnej lub chronionej metody.
Uwaga: na platformie .NET dla aplikacji ze Sklepu Windows lub przenośnej biblioteki klas przechwyć wyjątek klasy bazowej , MemberAccessExceptionzamiast tego.
Wystąpił błąd podczas pobierania wartości właściwości. Na przykład wartość indeksu określona dla indeksowanej właściwości jest poza zakresem. Właściwość InnerException wskazuje przyczynę błędu.
Przykłady
W poniższym przykładzie pokazano, jak uzyskać wartość indeksowanej właściwości. Właściwość String.Chars[] jest właściwością domyślną (indeksator w języku C#) String klasy.
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
Uwagi
Aby określić, czy właściwość jest indeksowana, użyj GetIndexParameters metody . Jeśli wynikowa tablica ma 0 (zero), właściwość nie jest indeksowana.
Jest to metoda wygody, która zapewnia implementację metody abstrakcyjnej GetValue
z parametrem Default
BindingFlags
, Binder
ustawionym na null
, i ustawionym CultureInfo
na null
.
Ponieważ właściwości statyczne należą do typu, a nie poszczególnych obiektów, pobierz właściwości statyczne, przekazując null
jako argument obiektu. Na przykład użyj następującego kodu, aby pobrać właściwość statyczną CurrentCulture
elementu CultureInfo
:
PropertyInfo CurCultProp =
(typeof(CultureInfo)).GetProperty("CurrentCulture");
Console.WriteLine("CurrCult: " +
CurCultProp.GetValue(null,null));
Aby użyć GetValue
metody, najpierw pobierz klasę Type
. W pliku Type
pobierz element PropertyInfo
. W metodzie PropertyInfo
użyj GetValue
metody .
Uwaga
Począwszy od programu .NET Framework 2.0, ta metoda może służyć do uzyskiwania dostępu do niepublizowanych elementów członkowskich, jeśli obiekt wywołujący otrzymał ReflectionPermissionReflectionPermissionFlag.RestrictedMemberAccess flagę, a zestaw dotacji niepublizowanych członków jest ograniczony do zestawu dotacji obiektu wywołującego lub jego podzbioru. (Zobacz Zagadnienia dotyczące zabezpieczeń do odbicia). Aby korzystać z tej funkcji, aplikacja powinna być docelowa dla programu .NET Framework 3.5 lub nowszego.
Dotyczy
GetValue(Object, BindingFlags, Binder, Object[], CultureInfo)
- Źródło:
- PropertyInfo.cs
- Źródło:
- PropertyInfo.cs
- Źródło:
- PropertyInfo.cs
Po zastąpieniu w klasie pochodnej zwraca wartość właściwości określonego obiektu, który ma określone powiązanie, indeks i informacje specyficzne dla kultury.
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
Parametry
- obj
- Object
Obiekt, którego wartość właściwości zostanie zwrócona.
- invokeAttr
- BindingFlags
Bitowa kombinacja następujących elementów członkowskich wyliczenia, które określają atrybut wywołania: InvokeMethod
, , GetField
Static
SetField
CreateInstance
GetProperty
i .SetProperty
Należy określić odpowiedni atrybut wywołania. Aby na przykład wywołać statyczny element członkowski, ustaw flagę Static
.
- binder
- Binder
Obiekt, który umożliwia powiązanie, wymuszanie typów argumentów, wywołanie elementów członkowskich i pobieranie MemberInfo obiektów przez odbicie. Jeśli binder
jest to null
, jest używany domyślny binder.
- index
- Object[]
Opcjonalne wartości indeksu dla właściwości indeksowanych. Ta wartość powinna być null
przeznaczona dla właściwości nieindeksowanych.
- culture
- CultureInfo
Kultura, dla której zasób ma być zlokalizowany. Jeśli zasób nie jest zlokalizowany dla tej kultury, Parent właściwość zostanie wywołana kolejno w poszukiwaniu dopasowania. Jeśli ta wartość to null
, informacje specyficzne dla kultury są uzyskiwane z CurrentUICulture właściwości .
Zwraca
Wartość właściwości określonego obiektu.
Implementuje
Wyjątki
Tablica index
nie zawiera wymaganego typu argumentów.
-lub-
Nie można odnaleźć metody dostępu właściwości get
.
Obiekt nie jest zgodny z typem docelowym lub właściwość jest właściwością wystąpienia, ale obj
jest null
.
Liczba parametrów w elemecie index
nie jest zgodna z liczbą parametrów pobieraną przez indeksowaną właściwość.
W klasie wystąpiła nielegalna próba uzyskania dostępu do prywatnej lub chronionej metody.
Wystąpił błąd podczas pobierania wartości właściwości. Na przykład wartość indeksu określona dla indeksowanej właściwości jest poza zakresem. Właściwość InnerException wskazuje przyczynę błędu.
Uwagi
Aby określić, czy właściwość jest indeksowana, użyj GetIndexParameters metody . Jeśli wynikowa tablica ma 0 (zero), właściwość nie jest indeksowana.
Ponieważ właściwości statyczne należą do typu, a nie poszczególnych obiektów, pobierz właściwości statyczne, przekazując null
jako argument obiektu. Na przykład użyj następującego kodu, aby pobrać właściwość statyczną CurrentCulture
elementu CultureInfo
:
PropertyInfo CurCultProp =
(typeof(CultureInfo)).GetProperty("CurrentCulture");
Console.WriteLine("CurrCult: " +
CurCultProp.GetValue(null,null));
Aby użyć GetValue
metody, najpierw pobierz klasę Type
. W pliku Type
pobierz element PropertyInfo
. W metodzie PropertyInfo
użyj GetValue
metody .
Uwaga
Począwszy od programu .NET Framework 2.0, ta metoda może służyć do uzyskiwania dostępu do niepublizowanych elementów członkowskich, jeśli obiekt wywołujący otrzymał ReflectionPermissionReflectionPermissionFlag.RestrictedMemberAccess flagę, a zestaw dotacji niepublizowanych członków jest ograniczony do zestawu dotacji obiektu wywołującego lub jego podzbioru. (Zobacz Zagadnienia dotyczące zabezpieczeń do odbicia). Aby korzystać z tej funkcji, aplikacja powinna być docelowa dla programu .NET Framework 3.5 lub nowszego.