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í
| Name | Description |
|---|---|
| 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á zadané vazby, index a informace specifické pro jazykovou verzi. |
GetValue(Object)
- Zdroj:
- PropertyInfo.cs
- Zdroj:
- PropertyInfo.cs
- 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 Planet třídu, která má dvě vlastnosti: Namenázev planety; a Distance, vzdálenost planety od Země. Příklad vytvoří instanci objektu Planet , který představuje planetu Jupiter, a předá ji GetPropertyValues metodě, která zobrazuje informace o vlastnostech a používá 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í GetValue(Object) přetížení načtení hodnoty neindexované vlastnosti; pokud se pokusíte načíst hodnotu indexované vlastnosti, metoda vyvolá TargetParameterCountException výjimku. Můžete určit, zda je vlastnost indexována, nebo ne voláním GetIndexParameters metody. Pokud je délka vráceného ParameterInfo pole nula, vlastnost není indexována.
Jedná se o metodu pohodlí, která poskytuje implementaci pro abstraktní GetValue(Object, BindingFlags, Binder, Object[], CultureInfo) metodu s parametrem BindingFlags nastaveným na BindingFlags.Default, nastaveno nullBinder na , pole objektů hodnot indexu nastavené na nulla nastaveno CultureInfo na null.
Platí pro
GetValue(Object, Object[])
- Zdroj:
- PropertyInfo.cs
- Zdroj:
- PropertyInfo.cs
- 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 indexu 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řístupové objekty get vlastnosti nebyly nalezeny.
Objekt neodpovídá cílovému typu nebo vlastnost je vlastnost instance, ale obj je null.
Počet parametrů index neodpovídá počtu parametrů, které indexovaná vlastnost přebírá.
Došlo k nezákonné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.
Příklady
Následující příklad ukazuje, jak získat hodnotu indexované vlastnosti. Vlastnost String.Chars[] je výchozí vlastnost (indexer v jazyce C#) String třídy.
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 výsledná matice obsahuje 0 (nula) prvků, vlastnost není indexována.
Jedná se o metodu pohodlí, která poskytuje implementaci abstraktní GetValue metody s parametrem BindingFlagsDefault, Binder nastaveným nullna a nastavenou na CultureInfonull.
Vzhledem k tomu, že statické vlastnosti patří k typu, nikoli k jednotlivým objektům, získejte statické vlastnosti předáním null argumentu objektu. Například pomocí následujícího kódu získejte statickou CurrentCulture vlastnost CultureInfo :
PropertyInfo CurCultProp =
(typeof(CultureInfo)).GetProperty("CurrentCulture");
Console.WriteLine("CurrCult: " +
CurCultProp.GetValue(null,null));
Chcete-li použít metodu GetValue , nejprve získejte třídu Type. Od , Typezískat PropertyInfo. Z příkazu PropertyInfo, použijte metodu GetValue .
Poznámka:
Tuto metodu lze použít pro přístup k neveřejným členům, pokud byl volající udělen ReflectionPermission příznakem ReflectionPermissionFlag.RestrictedMemberAccess a pokud je sada udělení nepřístupných členů omezena na sadu grantů volajícího nebo její podmnožinu. (Viz Aspekty zabezpečení reflexe.) Pokud chcete tuto funkci používat, měla by vaše aplikace cílit na .NET Framework 3.5 nebo novější.
Platí pro
GetValue(Object, BindingFlags, Binder, Object[], CultureInfo)
- Zdroj:
- PropertyInfo.cs
- Zdroj:
- PropertyInfo.cs
- 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á zadané vazby, 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, StaticGetField, , SetFieldGetPropertya 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, převod typů argumentů, vyvolání členů a načtení MemberInfo objektů prostřednictvím reflexe. Pokud binder ano null, použije se výchozí pořadač.
- index
- Object[]
Volitelné hodnoty indexu 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í lokalizovaný pro tuto jazykovou verzi, Parent bude vlastnost volána postupně při hledání shody. Pokud je nulltato hodnota , informace specifické pro jazykovou verzi jsou získány z CurrentUICulture vlastnosti.
Návraty
Hodnota vlastnosti zadaného objektu.
Implementuje
Výjimky
Pole index neobsahuje požadovaný typ argumentů.
nebo
Přístupové objekty get vlastnosti nebyly nalezeny.
Objekt neodpovídá cílovému typu nebo vlastnost je vlastnost instance, ale obj je null.
Počet parametrů index neodpovídá počtu parametrů, které indexovaná vlastnost přebírá.
Došlo k nezákonné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 výsledná matice obsahuje 0 (nula) prvků, vlastnost není indexována.
Vzhledem k tomu, že statické vlastnosti patří k typu, nikoli k jednotlivým objektům, získejte statické vlastnosti předáním null argumentu objektu. Například pomocí následujícího kódu získejte statickou CurrentCulture vlastnost CultureInfo :
PropertyInfo CurCultProp =
(typeof(CultureInfo)).GetProperty("CurrentCulture");
Console.WriteLine("CurrCult: " +
CurCultProp.GetValue(null,null));
Chcete-li použít metodu GetValue , nejprve získejte třídu Type. Od , Typezískat PropertyInfo. Z příkazu PropertyInfo, použijte metodu GetValue .
Poznámka:
Tuto metodu lze použít pro přístup k neveřejným členům, pokud byl volající udělen ReflectionPermission příznakem ReflectionPermissionFlag.RestrictedMemberAccess a pokud je sada udělení nepřístupných členů omezena na sadu grantů volajícího nebo její podmnožinu. (Viz Aspekty zabezpečení reflexe.) Pokud chcete tuto funkci používat, měla by vaše aplikace cílit na .NET Framework 3.5 nebo novější.