Sdílet prostřednictvím


PropertyInfo.GetValue Metoda

Definice

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 nullhodnotu , Binder polem objektu s hodnotami indexu nastavenými na nullhodnotu a parametrem nastaveným CultureInfo na nullhodnotu .

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 DefaultBindingFlags , Binder nastavenou na a nullnastavenou 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 Typezískejte PropertyInfo. V souboru PropertyInfopouž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, GetFieldSetField, , GetPropertya 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 nulltato 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 Typezískejte PropertyInfo. V souboru PropertyInfopouž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ší.

Viz také

Platí pro