Прочитать на английском

Поделиться через


PropertyInfo.GetValue Метод

Определение

Возвращает значение свойства указанного объекта.

Перегрузки

GetValue(Object)

Возвращает значение свойства указанного объекта.

GetValue(Object, Object[])

Возвращает значение свойства заданного объекта с дополнительными значениями индекса для индексированных свойств.

GetValue(Object, BindingFlags, Binder, Object[], CultureInfo)

При переопределении в производном классе возвращает значение свойства заданного объекта, имеющего указанные сведения о привязке, индексе и языке и региональных параметрах.

GetValue(Object)

Исходный код:
PropertyInfo.cs
Исходный код:
PropertyInfo.cs
Исходный код:
PropertyInfo.cs

Возвращает значение свойства указанного объекта.

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

Параметры

obj
Object

Объект, свойство которого будет возвращено.

Возвращаемое значение

Значение свойства указанного объекта.

Примеры

В следующем примере определяется Planet класс с двумя свойствами: Name, имя планеты и Distanceрасстояние планеты от Земли. В примере создается Planet экземпляр объекта , представляющего планету Юпитер, и передается методу GetPropertyValues , который отображает сведения о свойствах и использует GetValue метод для получения значения каждого Planet свойства.

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

Комментарии

Перегрузка GetValue(Object) вызывается для получения значения неиндексированного свойства. При попытке получить значение индексированного свойства метод создает TargetParameterCountException исключение. Можно определить, индексируется ли свойство, вызвав GetIndexParameters метод . Если длина возвращаемого массива ParameterInfo равна нулю, свойство не индексируется.

Это удобный метод, предоставляющий реализацию абстрактного GetValue(Object, BindingFlags, Binder, Object[], CultureInfo) метода с BindingFlags параметром , для параметра задано значение BindingFlags.Default, Binder для параметра задано значение null, для массива объектов значений индекса задано nullзначение , а CultureInfo для набора — значение null.

Применяется к

.NET 9 и другие версии
Продукт Версии
.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[])

Исходный код:
PropertyInfo.cs
Исходный код:
PropertyInfo.cs
Исходный код:
PropertyInfo.cs

Возвращает значение свойства заданного объекта с дополнительными значениями индекса для индексированных свойств.

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

Параметры

obj
Object

Объект, свойство которого будет возвращено.

index
Object[]

Необязательные значения индекса для индексированных свойств. Индексы индексированных свойств отсчитываются от нуля. Для неиндексированных свойств это значение должно быть равно null.

Возвращаемое значение

Значение свойства указанного объекта.

Реализации

Исключения

Массив index не содержит необходимого типа аргументов.

-или-

Не найден метод доступа get свойства.

Объект не соответствует целевому типу, или свойство является свойством экземпляра, но obj имеет значение null.

Примечание. Вместо этого в .NET для приложений Магазина Windows или переносимой библиотеки классов выполните перехват Exception .

Число параметров в index не соответствует числу параметров, принимаемых индексированным свойством.

Недопустимая попытка доступа к частному или защищенному методу внутри класса.

Примечание. В .NET для приложений Магазина Windows или переносимой библиотеки классов перехватите исключение базового класса , MemberAccessException.

Ошибка при получении значения свойства. Например, значение индекса, указанное для индексированного свойства, находится вне диапазона. Свойство InnerException содержит причину данной ошибки.

Примеры

В следующем примере показано, как получить значение индексированного свойства. Свойство String.Chars[] является свойством по умолчанию (индексатор в 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

Комментарии

Чтобы определить, индексируется ли свойство, используйте GetIndexParameters метод . Если результирующий массив содержит 0 (ноль) элементов, свойство не индексируется.

Это удобный метод, предоставляющий реализацию абстрактного GetValue метода с параметром DefaultBindingFlags , Binder значением , nullа CultureInfo для — значение null.

Так как статические свойства принадлежат типу, а не отдельным объектам, получение статических свойств путем передачи null в качестве аргумента объекта. Например, используйте следующий код, чтобы получить статическое CurrentCulture свойство объекта CultureInfo :

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

Чтобы использовать GetValue метод , сначала получите класс Type. TypeИз получите PropertyInfo. В используйте PropertyInfoGetValue метод .

Примечание

Начиная с ReflectionPermissionFlag.RestrictedMemberAccess .NET Framework 2.0, этот метод можно использовать для доступа к элементам, не являющиеся открытыми, если вызывающему объекту предоставлен ReflectionPermission флаг и если набор разрешений для не являющихся открытыми элементов ограничен набором разрешений вызывающего объекта или его подмножеством. (См. раздел Вопросы безопасности для отражения.) Чтобы использовать эту функцию, приложение должно быть предназначено для .NET Framework 3.5 или более поздней версии.

Применяется к

.NET 9 и другие версии
Продукт Версии
.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)

Исходный код:
PropertyInfo.cs
Исходный код:
PropertyInfo.cs
Исходный код:
PropertyInfo.cs

При переопределении в производном классе возвращает значение свойства заданного объекта, имеющего указанные сведения о привязке, индексе и языке и региональных параметрах.

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);

Параметры

obj
Object

Объект, свойство которого будет возвращено.

invokeAttr
BindingFlags

Битовая комбинация следующих членов перечисления, определяющих атрибут вызова: InvokeMethod, CreateInstance, Static, GetField, SetField, GetProperty и SetProperty. Необходимо указать подходящий атрибут вызова. Например, чтобы вызвать статический член, установите флаг Static.

binder
Binder

Объект, который допускает привязку, приведение типов аргументов, вызов элементов и извлечение объектов MemberInfo путем отражения. Если значение параметра binder равно null, используется связыватель по умолчанию.

index
Object[]

Необязательные значения индекса для индексированных свойств. Для неиндексированных свойств это значение должно быть равно null.

culture
CultureInfo

Язык и региональные параметры, для которых должен быть локализован данный ресурс. Если ресурс не локализован для данного языка и региональных параметров, при поиске соответствия будет последовательно вызываться свойство Parent. Если это значение равно null, из свойства CurrentUICulture получаются сведения, относящиеся к конкретному языку и региональным параметрам.

Возвращаемое значение

Значение свойства указанного объекта.

Реализации

Исключения

Массив index не содержит необходимого типа аргументов.

-или-

Не найден метод доступа get свойства.

Объект не соответствует целевому типу, или свойство является свойством экземпляра, но obj имеет значение null.

Число параметров в index не соответствует числу параметров, принимаемых индексированным свойством.

Возникла недопустимая попытка доступа к частному или защищенному методу внутри класса.

Ошибка при получении значения свойства. Например, значение индекса, указанное для индексированного свойства, находится вне диапазона. Свойство InnerException содержит причину данной ошибки.

Комментарии

Чтобы определить, индексируется ли свойство, используйте GetIndexParameters метод . Если результирующий массив содержит 0 (ноль) элементов, свойство не индексируется.

Так как статические свойства принадлежат типу, а не отдельным объектам, получение статических свойств путем передачи null в качестве аргумента объекта. Например, используйте следующий код, чтобы получить статическое CurrentCulture свойство объекта CultureInfo :

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

Чтобы использовать GetValue метод , сначала получите класс Type. TypeИз получите PropertyInfo. В используйте PropertyInfoGetValue метод .

Примечание

Начиная с ReflectionPermissionFlag.RestrictedMemberAccess .NET Framework 2.0, этот метод можно использовать для доступа к элементам, не являющиеся открытыми, если вызывающему объекту предоставлен ReflectionPermission флаг и если набор разрешений для не являющихся открытыми элементов ограничен набором разрешений вызывающего объекта или его подмножеством. (См. раздел Вопросы безопасности для отражения.) Чтобы использовать эту функцию, приложение должно быть предназначено для .NET Framework 3.5 или более поздней версии.

См. также раздел

Применяется к

.NET 9 и другие версии
Продукт Версии
.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