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

C#
public object GetValue (object obj);
C#
public object? GetValue (object? obj);

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 Distanceodległ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.

C#
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

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ą nullna , tablicą obiektów wartości indeksu ustawioną na null, i CultureInfo ustawioną na null.

Dotyczy

.NET 9 i inne wersje
Produkt Wersje
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

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.

C#
public virtual object GetValue (object obj, object[] index);
C#
public virtual object? GetValue (object? obj, object?[]? index);

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.

C#
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

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 DefaultBindingFlags , 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 :

C#
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 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

.NET 9 i inne wersje
Produkt Wersje
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

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.

C#
public abstract object? GetValue (object? obj, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder? binder, object?[]? index, System.Globalization.CultureInfo? culture);
C#
public abstract object GetValue (object obj, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, object[] index, System.Globalization.CultureInfo culture);

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

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 :

C#
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 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.

Zobacz też

Dotyczy

.NET 9 i inne wersje
Produkt Wersje
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1