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 или более поздней версии.

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

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