PropertyInfo.GetValue Metoda
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Vrátí hodnotu vlastnosti zadaného objektu.
Přetížení
GetValue(Object) |
Vrátí hodnotu vlastnosti zadaného objektu. |
GetValue(Object, Object[]) |
Vrátí hodnotu vlastnosti zadaného objektu s volitelnými hodnotami indexu pro indexované vlastnosti. |
GetValue(Object, BindingFlags, Binder, Object[], CultureInfo) |
Při přepsání v odvozené třídě vrátí hodnotu vlastnosti zadaného objektu, který má zadanou vazbu, index a informace specifické pro jazykovou verzi. |
GetValue(Object)
- Zdroj:
- PropertyInfo.cs
- Zdroj:
- PropertyInfo.cs
- Zdroj:
- PropertyInfo.cs
Vrátí hodnotu vlastnosti zadaného objektu.
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
Objekt, jehož hodnota vlastnosti bude vrácena.
Návraty
Hodnota vlastnosti zadaného objektu.
Příklady
Následující příklad definuje třídu, která má dvě vlastnosti: Name
, název planety Planet
a Distance
, vzdálenost planety od Země. Příklad vytvoří instanci objektu Planet
, který představuje planetu Jupiter, a předá ji metodě GetPropertyValues
, která zobrazí informace o vlastnostech a použije metodu GetValue k získání hodnoty každé Planet
vlastnosti.
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
Poznámky
Voláním GetValue(Object) přetížení načtete hodnotu neindexované vlastnosti. Pokud se pokusíte načíst hodnotu indexované vlastnosti, metoda vyvolá TargetParameterCountException výjimku. Můžete zjistit, zda je vlastnost indexována nebo ne voláním GetIndexParameters metody . Pokud je délka vráceného ParameterInfo pole nula, vlastnost se neindexuje.
Jedná se o pohodlnou metodu, která poskytuje implementaci pro abstraktní GetValue(Object, BindingFlags, Binder, Object[], CultureInfo) metodu s parametrem BindingFlags nastaveným na BindingFlags.Defaulthodnotu , nastavenou na null
hodnotu , Binder polem objektu s hodnotami indexu nastavenými na null
hodnotu a parametrem nastaveným CultureInfo na null
hodnotu .
Platí pro
GetValue(Object, Object[])
- Zdroj:
- PropertyInfo.cs
- Zdroj:
- PropertyInfo.cs
- Zdroj:
- PropertyInfo.cs
Vrátí hodnotu vlastnosti zadaného objektu s volitelnými hodnotami indexu pro indexované vlastnosti.
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
Objekt, jehož hodnota vlastnosti bude vrácena.
- index
- Object[]
Volitelné hodnoty indexů pro indexované vlastnosti. Indexy indexovaných vlastností jsou založené na nule. Tato hodnota by měla být null
pro neindexované vlastnosti.
Návraty
Hodnota vlastnosti zadaného objektu.
Implementuje
Výjimky
Pole index
neobsahuje požadovaný typ argumentů.
-nebo-
Přistupný get
objekt vlastnosti nebyl nalezen.
Objekt neodpovídá cílovému typu nebo vlastnost je vlastnost instance, ale obj
je null
.
Poznámka: V .NET pro aplikace pro Windows Store nebo v přenosné knihovně tříd místo toho zachyťte.Exception
Počet parametrů v index
souboru neodpovídá počtu parametrů, které indexovaná vlastnost přijímá.
Došlo k neoprávněnému pokusu o přístup k privátní nebo chráněné metodě uvnitř třídy.
Poznámka: V .NET pro aplikace pro Windows Store nebo v knihovně přenosných tříd místo toho zachyťte výjimku MemberAccessExceptionzákladní třídy .
Při načítání hodnoty vlastnosti došlo k chybě. Například hodnota indexu zadaná pro indexovanou vlastnost je mimo rozsah. Vlastnost InnerException označuje důvod chyby.
Příklady
Následující příklad ukazuje, jak získat hodnotu indexované vlastnosti. Vlastnost String.Chars[] je výchozí vlastností třídy (indexer v jazyce C#).String
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
Poznámky
Chcete-li zjistit, zda je vlastnost indexována, použijte metodu GetIndexParameters . Pokud má výsledné pole 0 (nula) prvků, vlastnost se neindexuje.
Toto je pohodlná metoda, která poskytuje implementaci pro abstraktní GetValue
metodu s parametrem Default
BindingFlags
, Binder
nastavenou na a null
nastavenou CultureInfo
na null
.
Vzhledem k tomu, že statické vlastnosti patří k typu, nikoli jednotlivým objektům, získejte statické vlastnosti předáním null
jako argumentu objektu. Například pomocí následujícího kódu získáte statickou CurrentCulture
vlastnost :CultureInfo
PropertyInfo CurCultProp =
(typeof(CultureInfo)).GetProperty("CurrentCulture");
Console.WriteLine("CurrCult: " +
CurCultProp.GetValue(null,null));
Pokud chcete použít metodu GetValue
, nejprve získejte třídu Type
. V souboru Type
získejte PropertyInfo
. V souboru PropertyInfo
použijte metodu GetValue
.
Poznámka
Počínaje rozhraním .NET Framework 2.0 lze tuto metodu použít pro přístup k neveřejným členům, pokud volajícímu byl udělen ReflectionPermissionReflectionPermissionFlag.RestrictedMemberAccess příznak a pokud je sada udělení neveřejných členů omezena na sadu udělení volajícího nebo její podmnožinu. (Viz Aspekty zabezpečení pro reflexi.) Pokud chcete tuto funkci používat, měla by vaše aplikace cílit na rozhraní .NET Framework 3.5 nebo novější.
Platí pro
GetValue(Object, BindingFlags, Binder, Object[], CultureInfo)
- Zdroj:
- PropertyInfo.cs
- Zdroj:
- PropertyInfo.cs
- Zdroj:
- PropertyInfo.cs
Při přepsání v odvozené třídě vrátí hodnotu vlastnosti zadaného objektu, který má zadanou vazbu, index a informace specifické pro jazykovou verzi.
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
Objekt, jehož hodnota vlastnosti bude vrácena.
- invokeAttr
- BindingFlags
Bitová kombinace následujících členů výčtu, které určují atribut vyvolání: InvokeMethod
, , CreateInstance
, Static
, GetField
SetField
, , GetProperty
a SetProperty
. Je nutné zadat vhodný atribut vyvolání. Pokud chcete například vyvolat statický člen, nastavte Static
příznak .
- binder
- Binder
Objekt, který umožňuje vazbu, vynucování typů argumentů, vyvolání členů a načtení MemberInfo objektů prostřednictvím reflexe. Pokud binder
je null
, použije se výchozí pořadač.
- index
- Object[]
Volitelné hodnoty indexů pro indexované vlastnosti. Tato hodnota by měla být null
pro neindexované vlastnosti.
- culture
- CultureInfo
Jazyková verze, pro kterou má být prostředek lokalizován. Pokud prostředek není lokalizován pro tuto jazykovou verzi, Parent bude vlastnost volána postupně při hledání shody. Pokud je null
tato hodnota , informace specifické pro jazykovou verzi jsou získány CurrentUICulture z vlastnosti .
Návraty
Hodnota vlastnosti zadaného objektu.
Implementuje
Výjimky
Pole index
neobsahuje požadovaný typ argumentů.
-nebo-
Přistupný get
objekt vlastnosti nebyl nalezen.
Objekt neodpovídá cílovému typu nebo vlastnost je vlastnost instance, ale obj
je null
.
Počet parametrů v index
souboru neodpovídá počtu parametrů, které indexovaná vlastnost přijímá.
Došlo k neoprávněnému pokusu o přístup k privátní nebo chráněné metodě uvnitř třídy.
Při načítání hodnoty vlastnosti došlo k chybě. Například hodnota indexu zadaná pro indexovanou vlastnost je mimo rozsah. Vlastnost InnerException označuje důvod chyby.
Poznámky
Chcete-li zjistit, zda je vlastnost indexována, použijte metodu GetIndexParameters . Pokud má výsledné pole 0 (nula) prvků, vlastnost se neindexuje.
Vzhledem k tomu, že statické vlastnosti patří k typu, nikoli jednotlivým objektům, získejte statické vlastnosti předáním null
jako argumentu objektu. Například pomocí následujícího kódu získáte statickou CurrentCulture
vlastnost :CultureInfo
PropertyInfo CurCultProp =
(typeof(CultureInfo)).GetProperty("CurrentCulture");
Console.WriteLine("CurrCult: " +
CurCultProp.GetValue(null,null));
Pokud chcete použít metodu GetValue
, nejprve získejte třídu Type
. V souboru Type
získejte PropertyInfo
. V souboru PropertyInfo
použijte metodu GetValue
.
Poznámka
Počínaje rozhraním .NET Framework 2.0 lze tuto metodu použít pro přístup k neveřejným členům, pokud volajícímu byl udělen ReflectionPermissionReflectionPermissionFlag.RestrictedMemberAccess příznak a pokud je sada udělení neveřejných členů omezena na sadu udělení volajícího nebo její podmnožinu. (Viz Aspekty zabezpečení pro reflexi.) Pokud chcete tuto funkci používat, měla by vaše aplikace cílit na rozhraní .NET Framework 3.5 nebo novější.