使用英语阅读

通过


FieldInfo.GetValue(Object) 方法

定义

当在派生类中重写时,返回给定对象支持的字段的值。

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

参数

obj
Object

将返回其字段值的对象。

返回

一个对象,包含此实例反映的字段的值。

实现

例外

该字段是非静态的,并且 objnull

注意:在 适用于 Windows 应用商店应用的 .NET可移植类库中,请改为 catch Exception

字段被标记为文本,但该字段不具有一个可被接受的文本类型。

调用方没有权限来访问此字段。

注意:在 适用于 Windows 应用商店应用的 .NET可移植类库中,改为捕获基类异常 MemberAccessException

该方法既不由 obj 的类声明也不由其继承。

示例

以下示例使用 GetValue 方法检索静态字段的值。 请注意,参数nullobj值为 。

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

下面的示例检索表示类型的字段FieldsClassFieldInfo 对象的数组,然后调用 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 应是继承或声明字段的类的实例。 请注意, 的 GetValue 返回类型为 Object。 例如,如果 字段包含布尔基元值,则返回具有相应布尔值的 实例 Object 。 在返回值之前, GetValue 检查用户是否具有访问权限。

备注

对于完全受信任的代码,将忽略访问限制。 也就是说,只要代码完全受信任,就可以通过反射访问和调用私有构造函数、方法、字段和属性。

备注

从 .NET Framework 2.0 Service Pack 1 开始,如果调用方已使用 ReflectionPermissionFlag.RestrictedMemberAccess 标志授予ReflectionPermission,并且非公共成员的授权集仅限于调用方授权集或其子集,则此方法可用于访问非公共成员。 (请参阅 Reflection.) 的安全注意事项

若要使用此功能,应用程序应面向 .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

另请参阅