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

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


FieldInfo.GetValue(Object) Метод

Определение

При переопределении в производном классе возвращает значение поля, поддерживаемое данным объектом.

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

Параметры

obj
Object

Объект, значение поля которого будет возвращено.

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

Объект, содержащий значение поля, отраженное этим экземпляром.

Реализации

Исключения

Поле не является статическим, а параметр obj имеет значение null.

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

Поле помечено как литерал, однако для него не задан допустимый тип литерала.

Вызывающий объект не имеет разрешения на доступ к этому полю.

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

Этот метод не объявлен в классе obj и не унаследован таким классом.

Примеры

В следующем примере метод используется GetValue для получения значения статического поля. Обратите внимание, что аргумент имеет nullзначение obj .

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

В следующем примере извлекается массив 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'

Комментарии

Если поле является статическим, obj игнорируется. Для нестатических полей должен быть экземпляром класса, obj наследующего или объявляющего поле. Обратите внимание, что тип возвращаемого значения GetValueObject. Например, если поле содержит логическое примитивное значение, возвращается экземпляр Object с соответствующим логическим значением. Перед возвратом значения проверяет, GetValue есть ли у пользователя разрешение на доступ.

Примечание

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

Примечание

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

Чтобы использовать эту функцию, приложение должно быть предназначено для .NET Framework 3.5 или более поздней версии.

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

Продукт Версии
.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, 10
.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

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