PropertyInfo.GetValue Metoda

Definicja

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 właściwości indeksowanych.

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)

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

Object

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 Distanceodległość planety od Ziemi. Przykład tworzy wystąpienie obiektu reprezentującego planetę Planet Jowisza 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ść właściwości indeksowanej, 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 wygodna, która zapewnia implementację metody abstrakcyjnej GetValue(Object, BindingFlags, Binder, Object[], CultureInfo) z parametrem BindingFlags ustawionym na BindingFlags.Default, ustawioną nullna , Binder tablicą obiektów wartości indeksu ustawioną na null, i ustawioną CultureInfo na null.

Dotyczy

GetValue(Object, Object[])

Zwraca wartość właściwości określonego obiektu z opcjonalnymi wartościami indeksu dla właściwości indeksowanych.

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 właściwości indeksowanych są oparte na zera. Ta wartość powinna dotyczyć null właściwości nieindeksowanych.

Zwraca

Object

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: na platformie .NET dla aplikacji ze sklepu Windows Lub przenośnej biblioteki klas przechwyć Exception zamiast tego.

Liczba parametrów w elemecie index nie jest zgodna z liczbą parametrów pobieranych przez właściwość indeksowaną.

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ść właściwości indeksowanej. 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 zawiera 0 (zero), właściwość nie jest indeksowana.

Jest to metoda wygody, która zapewnia implementację metody abstrakcyjnej GetValue z parametrem BindingFlags Default, Binder zestaw na null, i CultureInfo zestaw na null.

Ponieważ właściwości statyczne należą do typu, a nie pojedynczych 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 CultureInfo elementu :

PropertyInfo CurCultProp =   
    (typeof(CultureInfo)).GetProperty("CurrentCulture");   
Console.WriteLine("CurrCult: " +  
    CurCultProp.GetValue(null,null));  

Aby użyć GetValue metody , najpierw pobierz klasę Type. W pliku Typepobierz element PropertyInfo. W pliku PropertyInfoużyj GetValue metody .

Uwaga

Począwszy od .NET Framework 2.0, ta metoda może służyć do uzyskiwania dostępu do elementów członkowskich innych niż publiczne, jeśli obiekt wywołujący otrzymał ReflectionPermission flagęReflectionPermissionFlag.RestrictedMemberAccess, a zestaw dotacji niepublikowych członków jest ograniczony do zestawu dotacji osoby wywołującej lub jego podzbioru. (Zobacz Zagadnienia dotyczące zabezpieczeń dotyczące odbicia). Aby korzystać z tej funkcji, aplikacja powinna być docelowa .NET Framework 3.5 lub nowszą.

Dotyczy

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.

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, , GetFieldStaticSetFieldCreateInstanceGetPropertyi .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

Object

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 Typepobierz element PropertyInfo. W metodzie PropertyInfoużyj GetValue metody .

Uwaga

Począwszy od .NET Framework 2.0, ta metoda może służyć do uzyskiwania dostępu do niepublizowanych członków, jeśli obiekt wywołujący otrzymał ReflectionPermission ReflectionPermissionFlag.RestrictedMemberAccess flagę, a zestaw dotacji niepublizowanych członków jest ograniczony do zestawu dotacji osoby wywołującej lub jego podzbioru. (Zobacz Zagadnienia dotyczące zabezpieczeń do odbicia). Aby korzystać z tej funkcji, aplikacja powinna być docelowa .NET Framework 3.5 lub nowszej.

Zobacz też

Dotyczy