FieldInfo.GetValue(Object) Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
При переопределении в производном классе возвращает значение поля, поддерживаемого заданным объектом.
public:
abstract System::Object ^ GetValue(System::Object ^ obj);
public abstract object GetValue(object obj);
public abstract object? GetValue(object? obj);
abstract member GetValue : obj -> obj
Public MustOverride Function GetValue (obj As Object) As Object
Параметры
- obj
- Object
Объект, значение поля которого будет возвращено.
Возвращаемое значение
Объект, содержащий значение поля, отраженного этим экземпляром.
Реализации
Исключения
Поле является нестатичным и obj имеет значение null.
Поле помечается литералом, но поле не имеет одного из принятых типов литерала.
Вызывающий объект не имеет разрешения на доступ к этому полю.
Метод не объявляется и не наследуется классом obj.
Примеры
В следующем примере метод используется GetValue для получения значения статического поля. Обратите внимание, что значение аргумента obj равно null.
using System;
using System.Reflection;
class Example
{
public static String val = "test";
public static void Main()
{
FieldInfo fld = typeof(Example).GetField("val");
Console.WriteLine(fld.GetValue(null));
val = "hi";
Console.WriteLine(fld.GetValue(null));
}
}
// The example displays the following output:
// test
// hi
Imports System.Reflection
Class Example
Public Shared val As String = "test"
Public Shared Sub Main()
Dim fld As FieldInfo = GetType(Example).GetField("val")
Console.WriteLine(fld.GetValue(Nothing))
val = "hi"
Console.WriteLine(fld.GetValue(Nothing))
End Sub
End Class
' The example displays the following output:
' test
' hi
В следующем примере извлекается массив FieldInfo объектов, представляющий поля FieldsClass типа, а затем вызывается GetValue для отображения значения каждого поля для fieldsInst объекта.
using System;
using System.Reflection;
public class FieldsClass
{
public string fieldA;
public string fieldB;
public FieldsClass()
{
fieldA = "A public field";
fieldB = "Another public field";
}
}
public class Example
{
public static void Main()
{
FieldsClass fieldsInst = new FieldsClass();
// Get the type of FieldsClass.
Type fieldsType = typeof(FieldsClass);
// Get an array of FieldInfo objects.
FieldInfo[] fields = fieldsType.GetFields(BindingFlags.Public
| BindingFlags.Instance);
// Display the values of the fields.
Console.WriteLine("Displaying the values of the fields of {0}:",
fieldsType);
for(int i = 0; i < fields.Length; i++)
{
Console.WriteLine(" {0}:\t'{1}'",
fields[i].Name, fields[i].GetValue(fieldsInst));
}
}
}
// The example displays the following output:
// Displaying the values of the fields of FieldsClass:
// fieldA: 'A public field'
// fieldB: 'Another public field'
Imports System.Reflection
Public Class FieldsClass
Public fieldA As String
Public fieldB As String
Public Sub New()
fieldA = "A public field"
fieldB = "Another public field"
End Sub
End Class
Public Module Example
Public Sub Main()
Dim fieldsInst As New FieldsClass()
' Get the type of FieldsClass.
Dim fieldsType As Type = GetType(FieldsClass)
' Get an array of FieldInfo objects.
Dim fields As FieldInfo() = fieldsType.GetFields(BindingFlags.Public Or BindingFlags.Instance)
' Display the values of the fields.
Console.WriteLine("Displaying the values of the fields of {0}:", fieldsType)
For i As Integer = 0 To fields.Length - 1
Console.WriteLine(" {0}:{2}'{1}'",
fields(i).Name, fields(i).GetValue(fieldsInst), vbTab)
Next
End Sub
End Module
' The example displays the following output:
' Displaying the values of the fields of FieldsClass:
' fieldA: 'A public field'
' fieldB: 'Another public field'
Комментарии
Если поле является статическим, obj игнорируется. Для нестатических полей obj должен быть экземпляр класса, наследующего или объявляющего поле. Обратите внимание, что возвращаемый тип GetValue имеет значение Object. Например, если поле содержит логическое примитивное значение, возвращается экземпляр Object с соответствующим логическим значением. Перед возвратом значения проверяет, GetValue имеет ли пользователь разрешение на доступ.
Note
Ограничения доступа игнорируются для полностью доверенного кода. То есть к частным конструкторам, методам, полям и свойствам можно обращаться и вызывать с помощью отражения всякий раз, когда код полностью доверяется.
Note
Этот метод можно использовать для доступа к недоступным членам, если вызывающий объект был предоставлен ReflectionPermission с ReflectionPermissionFlag.RestrictedMemberAccess флагом, и если набор грантов, не являющихся открытыми, ограничен набором предоставления вызывающего объекта или подмножеством. (См. вопросы безопасности для отражения.)
Чтобы использовать эту функцию, приложение должно использовать платформу .NET Framework 3.5 или более поздней версии.