PropertyInfo.GetValue Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Возвращает значение свойства указанного объекта.
Перегрузки
| Имя | Описание |
|---|---|
| GetValue(Object) |
Возвращает значение свойства указанного объекта. |
| GetValue(Object, Object[]) |
Возвращает значение свойства указанного объекта с необязательными значениями индекса для индексированных свойств. |
| GetValue(Object, BindingFlags, Binder, Object[], CultureInfo) |
При переопределении в производном классе возвращает значение свойства указанного объекта, имеющего указанную привязку, индекс и сведения о языке и региональных параметрах. |
GetValue(Object)
- Исходный код:
- PropertyInfo.cs
- Исходный код:
- PropertyInfo.cs
- Исходный код:
- PropertyInfo.cs
- Исходный код:
- PropertyInfo.cs
- Исходный код:
- PropertyInfo.cs
Возвращает значение свойства указанного объекта.
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
Параметры
- 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
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 исключение. Можно определить, индексируется ли свойство, вызывая GetIndexParameters метод. Если длина возвращаемого ParameterInfo массива равна нулю, свойство не индексируется.
Это удобный метод, предоставляющий реализацию абстрактного метода с BindingFlags набором параметров, Binder заданным для набораBindingFlags.Defaultnull, массивом объектов значений индекса, равным null, и набором CultureInfonull.GetValue(Object, BindingFlags, Binder, Object[], CultureInfo)
Применяется к
GetValue(Object, Object[])
- Исходный код:
- PropertyInfo.cs
- Исходный код:
- PropertyInfo.cs
- Исходный код:
- PropertyInfo.cs
- Исходный код:
- PropertyInfo.cs
- Исходный код:
- PropertyInfo.cs
Возвращает значение свойства указанного объекта с необязательными значениями индекса для индексированных свойств.
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
Параметры
- obj
- Object
Объект, значение свойства которого будет возвращено.
- index
- Object[]
Необязательные значения индекса для индексированных свойств. Индексы индексированных свойств являются отсчитываются от нуля. Это значение должно быть null для неиндексированных свойств.
Возвращаемое значение
Значение свойства указанного объекта.
Реализации
Исключения
Массив index не содержит нужный тип аргументов.
–или–
Метод доступа свойства get не найден.
Объект не соответствует целевому типу, или свойство является свойством экземпляра, но obj имеет значение null.
Число параметров в index не соответствует количеству параметров, которые принимает индексированные свойства.
Была неправлая попытка получить доступ к частному или защищенному методу внутри класса.
Произошла ошибка при получении значения свойства. Например, значение индекса, указанное для индексированного свойства, выходит за пределы диапазона. Свойство 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
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 метод. Если результирующий массив содержит 0 (ноль) элементов, свойство не индексируется.
Это удобный метод, который предоставляет реализацию абстрактного метода с BindingFlags параметром Default, Binder набором nullи набором CultureInfonull.GetValue
Так как статические свойства относятся к типу, а не отдельным объектам, получают статические свойства, передавая null в качестве аргумента объекта. Например, используйте следующий код для получения статического CurrentCulture свойства CultureInfo :
PropertyInfo CurCultProp =
(typeof(CultureInfo)).GetProperty("CurrentCulture");
Console.WriteLine("CurrCult: " +
CurCultProp.GetValue(null,null));
Чтобы использовать GetValue метод, сначала получите класс Type. Из файла Typeполучите PropertyInfo. В этом PropertyInfoслучае используйте GetValue метод.
Замечание
Этот метод можно использовать для доступа к недоступным членам, если вызывающий объект был предоставлен ReflectionPermission с ReflectionPermissionFlag.RestrictedMemberAccess флагом, и если набор грантов, не являющихся открытыми, ограничен набором предоставления вызывающего объекта или подмножеством. (См. вопросы Security Для отражения.) Чтобы использовать эту функцию, приложение должно использовать платформу .NET Framework 3.5 или более поздней версии.
Применяется к
GetValue(Object, BindingFlags, Binder, Object[], CultureInfo)
- Исходный код:
- PropertyInfo.cs
- Исходный код:
- PropertyInfo.cs
- Исходный код:
- PropertyInfo.cs
- Исходный код:
- PropertyInfo.cs
- Исходный код:
- PropertyInfo.cs
При переопределении в производном классе возвращает значение свойства указанного объекта, имеющего указанную привязку, индекс и сведения о языке и региональных параметрах.
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
Параметры
- obj
- Object
Объект, значение свойства которого будет возвращено.
- invokeAttr
- BindingFlags
Битовая комбинация следующих элементов перечисления, которые указывают атрибут вызова: InvokeMethod, CreateInstance, , GetFieldStatic, 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. В этом PropertyInfoслучае используйте GetValue метод.
Замечание
Этот метод можно использовать для доступа к недоступным членам, если вызывающий объект был предоставлен ReflectionPermission с ReflectionPermissionFlag.RestrictedMemberAccess флагом, и если набор грантов, не являющихся открытыми, ограничен набором предоставления вызывающего объекта или подмножеством. (См. вопросы Security Для отражения.) Чтобы использовать эту функцию, приложение должно использовать платформу .NET Framework 3.5 или более поздней версии.