PropertyInfo.GetValue Метод

Определение

Возвращает значение свойства указанного объекта.Returns the property value of a specified object.

Перегрузки

GetValue(Object)

Возвращает значение свойства указанного объекта.Returns the property value of a specified object.

GetValue(Object, Object[])

Возвращает значение свойства заданного объекта с дополнительными значениями индекса для индексированных свойств.Returns the property value of a specified object with optional index values for indexed properties.

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

При переопределении в производном классе возвращает значение свойства заданного объекта, имеющего указанные сведения о привязке, индексе и языке и региональных параметрах.When overridden in a derived class, returns the property value of a specified object that has the specified binding, index, and culture-specific information.

GetValue(Object)

Возвращает значение свойства указанного объекта.Returns the property value of a specified object.

public:
 System::Object ^ GetValue(System::Object ^ obj);
public object GetValue (object obj);
member this.GetValue : obj -> obj
Public Function GetValue (obj As Object) As Object

Параметры

obj
Object

Объект, свойство которого будет возвращено.The object whose property value will be returned.

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

Значение свойства указанного объекта.The property value of the specified object.

Примеры

В следующем примере определяется класс Planet, имеющий два свойства: Name, имя планеты; и Distance, расстояние от земли до планеты.The following example defines a Planet class that has two properties: Name, the name of the planet; and Distance, the planet's distance from Earth. В примере создается объект Planet, который представляет Планета-Юпитер, и передает его методу GetPropertyValues, который отображает сведения о свойствах, и использует метод GetValue для получения значения каждого свойства Planet.The example instantiates a Planet object that represents the planet Jupiter and passes it to a GetPropertyValues method that displays information about the properties and uses the GetValue method to get the value of each Planet property.

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

Комментарии

Чтобы получить значение неиндексированного свойства, вызовите перегрузку GetValue(Object). При попытке получить значение индексированного свойства метод вызывает исключение TargetParameterCountException.You call the GetValue(Object) overload to retrieve the value of a non-indexed property; if you try to retrieve the value of an indexed property, the method throws a TargetParameterCountException exception. Можно определить, индексируется ли свойство или нет, вызвав метод GetIndexParameters.You can determine whether a property is indexed or not by calling the GetIndexParameters method. Если длина возвращаемого ParameterInfo массива равна нулю, свойство не индексируется.If the length of the returned ParameterInfo array is zero, the property is not indexed.

Это удобный метод, предоставляющий реализацию для абстрактного метода GetValue(Object, BindingFlags, Binder, Object[], CultureInfo) с параметром BindingFlags, для которого задано значение BindingFlags.Default, Binder, для которого задано значение null, массив объектов значений индекса, для которого задано значение null, а CultureInfonull.This is a convenience method that provides an implementation for the abstract GetValue(Object, BindingFlags, Binder, Object[], CultureInfo) method with the BindingFlags parameter set to BindingFlags.Default, the Binder set to null, the object array of index values set to null, and the CultureInfo set to null.

GetValue(Object, Object[])

Возвращает значение свойства заданного объекта с дополнительными значениями индекса для индексированных свойств.Returns the property value of a specified object with optional index values for indexed properties.

public:
 virtual System::Object ^ GetValue(System::Object ^ obj, cli::array <System::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

Параметры

obj
Object

Объект, свойство которого будет возвращено.The object whose property value will be returned.

index
Object[]

Необязательные значения индекса для индексированных свойств.Optional index values for indexed properties. Индексы индексированных свойств отсчитываются от нуля.The indexes of indexed properties are zero-based. Для неиндексированных свойств это значение должно быть равно null.This value should be null for non-indexed properties.

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

Значение свойства указанного объекта.The property value of the specified object.

Реализации

Исключения

Массив index не содержит необходимого типа аргументов.The index array does not contain the type of arguments needed.

-или--or- Не найден метод доступа get свойства.The property's get accessor is not found.

Вместо этого в .NET для приложений Магазина Windows или в переносимой библиотеке классов перехватите исключение Exception.In the .NET for Windows Store apps or the Portable Class Library, catch Exception instead.

Объект не соответствует целевому типу, или свойство является свойством экземпляра, но obj имеет значение null.The object does not match the target type, or a property is an instance property but obj is null.

Число параметров в index не соответствует числу параметров, принимаемых индексированным свойством.The number of parameters in index does not match the number of parameters the indexed property takes.

Вместо этого в .NET для приложений Магазина Windows или в переносимой библиотеке классов перехватите исключение базового класса MemberAccessException.In the .NET for Windows Store apps or the Portable Class Library, catch the base class exception, MemberAccessException, instead.

Возникла недопустимая попытка доступа к частному или защищенному методу внутри класса.There was an illegal attempt to access a private or protected method inside a class.

Ошибка при получении значения свойства.An error occurred while retrieving the property value. Например, значение индекса, указанное для индексированного свойства, находится вне диапазона.For example, an index value specified for an indexed property is out of range. Свойство InnerException содержит причину данной ошибки.The InnerException property indicates the reason for the error.

Примеры

В следующем примере показано, как получить значение индексированного свойства.The following example shows how to get the value of an indexed property. Свойство String.Chars[Int32] является свойством по умолчанию (индексатором в C#) класса String.The String.Chars[Int32] property is the default property (the indexer in C#) of the String class.

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

Комментарии

Чтобы определить, индексируется ли свойство, используйте метод GetIndexParameters.To determine whether a property is indexed, use the GetIndexParameters method. Если результирующий массив содержит 0 (нуль) элементов, свойство не индексируется.If the resulting array has 0 (zero) elements, the property is not indexed.

Это удобный метод, который предоставляет реализацию для абстрактного метода GetValue с параметром BindingFlags Default, Binder, для которого задано значение null, а CultureInfo значение null.This is a convenience method that provides an implementation for the abstract GetValue method with a BindingFlags parameter of Default, the Binder set to null, and the CultureInfo set to null.

Поскольку статические свойства принадлежат к типу, а не к отдельным объектам, получение статических свойств осуществляется путем передачи null в качестве аргумента объекта.Because static properties belong to the type, not individual objects, get static properties by passing null as the object argument. Например, используйте следующий код, чтобы получить статическое свойство CurrentCulture CultureInfo:For example, use the following code to get the static CurrentCulture property of CultureInfo :

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

Чтобы использовать метод GetValue, сначала получите класс Type.To use the GetValue method, first get the class Type. В Typeполучите PropertyInfo.From the Type, get the PropertyInfo. В PropertyInfoиспользуйте метод GetValue.From the PropertyInfo, use the GetValue method.

Примечание

Начиная с .NET Framework 2.0 с пакетом обновления 1 (SP1).NET Framework 2.0 Service Pack 1, этот метод можно использовать для доступа к не являющимся открытыми членам, если вызывающий объект был предоставлен ReflectionPermission с флагом ReflectionPermissionFlag.RestrictedMemberAccess и если набор прав, не являющихся открытыми, ограничен набором предоставления вызывающего объекта или его подмножеством.Starting with the .NET Framework 2.0 с пакетом обновления 1 (SP1).NET Framework 2.0 Service Pack 1, this method can be used to access non-public members if the caller has been granted ReflectionPermission with the ReflectionPermissionFlag.RestrictedMemberAccess flag and if the grant set of the non-public members is restricted to the caller's grant set, or a subset thereof. (См. раздел вопросы безопасности для отражения.)(See Security Considerations for Reflection.)

Для применения этих функциональных возможностей приложение должно использовать .NET Framework 3,5.NET Framework 3.5 или более поздние версии.To use this functionality, your application should target the .NET Framework 3,5.NET Framework 3.5 or later.

Безопасность

ReflectionPermission
При вызове поздней привязки с помощью таких механизмов, как InvokeMember(String, BindingFlags, Binder, Object, Object[], ParameterModifier[], CultureInfo, String[]).when invoked late-bound through mechanisms such as InvokeMember(String, BindingFlags, Binder, Object, Object[], ParameterModifier[], CultureInfo, String[]). Связанное перечисление: MemberAccess.Associated enumeration: MemberAccess.

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

При переопределении в производном классе возвращает значение свойства заданного объекта, имеющего указанные сведения о привязке, индексе и языке и региональных параметрах.When overridden in a derived class, returns the property value of a specified object that has the specified binding, index, and culture-specific information.

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);
abstract member GetValue : obj * System.Reflection.BindingFlags * System.Reflection.Binder * obj[] * System.Globalization.CultureInfo -> obj

Параметры

obj
Object

Объект, свойство которого будет возвращено.The object whose property value will be returned.

invokeAttr
BindingFlags

Битовая комбинация следующих членов перечисления, определяющих атрибут вызова: InvokeMethod, CreateInstance, Static, GetField, SetField, GetProperty и SetProperty.A bitwise combination of the following enumeration members that specify the invocation attribute: InvokeMethod, CreateInstance, Static, GetField, SetField, GetProperty, and SetProperty. Необходимо указать подходящий атрибут вызова.You must specify a suitable invocation attribute. Например, чтобы вызвать статический член, установите флаг Static.For example, to invoke a static member, set the Static flag.

binder
Binder

Объект, который допускает привязку, приведение типов аргументов, вызов элементов и извлечение объектов MemberInfo путем отражения.An object that enables the binding, coercion of argument types, invocation of members, and retrieval of MemberInfo objects through reflection. Если значение параметра binder равно null, используется связыватель по умолчанию.If binder is null, the default binder is used.

index
Object[]

Необязательные значения индекса для индексированных свойств.Optional index values for indexed properties. Для неиндексированных свойств это значение должно быть равно null.This value should be null for non-indexed properties.

culture
CultureInfo

Язык и региональные параметры, для которых должен быть локализован данный ресурс.The culture for which the resource is to be localized. Если ресурс не локализован для данного языка и региональных параметров, при поиске соответствия будет последовательно вызываться свойство Parent.If the resource is not localized for this culture, the Parent property will be called successively in search of a match. Если это значение равно null, из свойства CurrentUICulture получаются сведения, относящиеся к конкретному языку и региональным параметрам.If this value is null, the culture-specific information is obtained from the CurrentUICulture property.

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

Значение свойства указанного объекта.The property value of the specified object.

Реализации

Исключения

Массив index не содержит необходимого типа аргументов.The index array does not contain the type of arguments needed.

-или--or- Не найден метод доступа get свойства.The property's get accessor is not found.

Объект не соответствует целевому типу, или свойство является свойством экземпляра, но obj имеет значение null.The object does not match the target type, or a property is an instance property but obj is null.

Число параметров в index не соответствует числу параметров, принимаемых индексированным свойством.The number of parameters in index does not match the number of parameters the indexed property takes.

Возникла недопустимая попытка доступа к частному или защищенному методу внутри класса.There was an illegal attempt to access a private or protected method inside a class.

Ошибка при получении значения свойства.An error occurred while retrieving the property value. Например, значение индекса, указанное для индексированного свойства, находится вне диапазона.For example, an index value specified for an indexed property is out of range. Свойство InnerException содержит причину данной ошибки.The InnerException property indicates the reason for the error.

Комментарии

Чтобы определить, индексируется ли свойство, используйте метод GetIndexParameters.To determine whether a property is indexed, use the GetIndexParameters method. Если результирующий массив содержит 0 (нуль) элементов, свойство не индексируется.If the resulting array has 0 (zero) elements, the property is not indexed.

Поскольку статические свойства принадлежат к типу, а не к отдельным объектам, получение статических свойств осуществляется путем передачи null в качестве аргумента объекта.Because static properties belong to the type, not individual objects, get static properties by passing null as the object argument. Например, используйте следующий код, чтобы получить статическое свойство CurrentCulture CultureInfo:For example, use the following code to get the static CurrentCulture property of CultureInfo :

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

Чтобы использовать метод GetValue, сначала получите класс Type.To use the GetValue method, first get the class Type. В Typeполучите PropertyInfo.From the Type, get the PropertyInfo. В PropertyInfoиспользуйте метод GetValue.From the PropertyInfo, use the GetValue method.

Примечание

Начиная с .NET Framework 2.0 с пакетом обновления 1 (SP1).NET Framework 2.0 Service Pack 1, этот метод можно использовать для доступа к не являющимся открытыми членам, если вызывающий объект был предоставлен ReflectionPermission с флагом ReflectionPermissionFlag.RestrictedMemberAccess и если набор прав, не являющихся открытыми, ограничен набором предоставления вызывающего объекта или его подмножеством.Starting with the .NET Framework 2.0 с пакетом обновления 1 (SP1).NET Framework 2.0 Service Pack 1, this method can be used to access non-public members if the caller has been granted ReflectionPermission with the ReflectionPermissionFlag.RestrictedMemberAccess flag and if the grant set of the non-public members is restricted to the caller's grant set, or a subset thereof. (См. раздел вопросы безопасности для отражения.)(See Security Considerations for Reflection.)

Для применения этих функциональных возможностей приложение должно использовать .NET Framework 3,5.NET Framework 3.5 или более поздние версии.To use this functionality, your application should target the .NET Framework 3,5.NET Framework 3.5 or later.

Безопасность

ReflectionPermission
При вызове поздней привязки с помощью таких механизмов, как InvokeMember(String, BindingFlags, Binder, Object, Object[], ParameterModifier[], CultureInfo, String[]).when invoked late-bound through mechanisms such as InvokeMember(String, BindingFlags, Binder, Object, Object[], ParameterModifier[], CultureInfo, String[]). Связанное перечисление: MemberAccess.Associated enumeration: MemberAccess.

Дополнительно

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