通过


FieldInfo.SetValue 方法

定义

将给定对象的字段值设置为给定值。

重载

名称 说明
SetValue(Object, Object)

设置给定对象支持的字段的值。

SetValue(Object, Object, BindingFlags, Binder, CultureInfo)

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

SetValue(Object, Object)

Source:
FieldInfo.cs
Source:
FieldInfo.cs
Source:
FieldInfo.cs
Source:
FieldInfo.cs
Source:
FieldInfo.cs

设置给定对象支持的字段的值。

public:
 virtual void SetValue(System::Object ^ obj, System::Object ^ value);
public:
 void SetValue(System::Object ^ obj, System::Object ^ value);
public virtual void SetValue(object obj, object value);
public void SetValue(object? obj, object? value);
public void SetValue(object obj, object value);
abstract member SetValue : obj * obj -> unit
override this.SetValue : obj * obj -> unit
member this.SetValue : obj * obj -> unit
Public Overridable Sub SetValue (obj As Object, value As Object)
Public Sub SetValue (obj As Object, value As Object)

参数

obj
Object

将设置其字段值的对象。

value
Object

要分配给字段的值。

实现

例外

调用方无权访问此字段。

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

obj 参数是 null ,字段是实例字段。

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

对象上不存在该字段。

-或-

value不能转换参数并将其存储在字段中。

示例

以下示例设置字段的值、获取和显示值、修改字段并显示结果。

using System;
using System.Reflection;
using System.Globalization;

public class Example
{
    private string myString;
    public Example()
    {
        myString = "Old value";
    }

    public string StringProperty
    {
        get
        {
            return myString;
        }
    }
}

public class FieldInfo_SetValue
{
    public static void Main()
    {
        Example myObject = new Example();
        Type myType = typeof(Example);
        FieldInfo myFieldInfo = myType.GetField("myString",
            BindingFlags.NonPublic | BindingFlags.Instance);

        // Display the string before applying SetValue to the field.
        Console.WriteLine( "\nThe field value of myString is \"{0}\".",
        myFieldInfo.GetValue(myObject));
        // Display the SetValue signature used to set the value of a field.
        Console.WriteLine( "Applying SetValue(Object, Object).");

        // Change the field value using the SetValue method.
        myFieldInfo.SetValue(myObject, "New value");
        // Display the string after applying SetValue to the field.
        Console.WriteLine( "The field value of mystring is \"{0}\".",
            myFieldInfo.GetValue(myObject));
    }
}

/* This code example produces the following output:

The field value of myString is "Old value".
Applying SetValue(Object, Object).
The field value of mystring is "New value".
 */
Imports System.Reflection
Imports System.Globalization

Public Class Example
   Private myString As String
   
   Public Sub New()
      myString = "Old value"
   End Sub 
   
   ReadOnly Property StringProperty() As String
      Get
         Return myString
      End Get
   End Property
End Class 


Public Module FieldInfo_SetValue
   
   Sub Main()

        Dim myObject As New Example()
        Dim myType As Type = GetType(Example)
        Dim myFieldInfo As FieldInfo = myType.GetField("myString", _
           BindingFlags.NonPublic Or BindingFlags.Instance)

        ' Display the string before applying SetValue to the field.
        Console.WriteLine(vbCrLf & "The field value of myString is ""{0}"".", _
            myFieldInfo.GetValue(myObject))
        ' Display the SetValue signature used to set the value of a field.
        Console.WriteLine("Applying SetValue(Object, Object).")

        ' Change the field value using the SetValue method. 
        myFieldInfo.SetValue(myObject, "New value")
        ' Display the string after applying SetValue to the field.
        Console.WriteLine("The field value of mystring is ""{0}"".", _
            myFieldInfo.GetValue(myObject))

    End Sub 
End Module

' This code example produces the following output:
' The field value of myString is "Old value".
' Applying SetValue(Object, Object).
' The field value of mystring is "New value".

注解

此方法将分配给 value 对象上 obj此实例反映的字段。 如果该字段为静态字段, obj 将忽略。 对于非静态字段, obj 应是继承或声明该字段的类的实例。 新值作为一个 Object传递 。 例如,如果字段的类型为布尔值,则会传递具有相应布尔值的实例 Object 。 在设置值之前, SetValue 检查用户是否具有访问权限。 此最终方法是调用以下 SetValue 方法的便利方法。

此方法不能用于可靠地设置静态、仅限初始化的字段(readonly 在 C#) 字段中的值。 在 .NET 版本中,如果尝试对静态仅限初始化的字段设置值,则会引发异常。

注释

完全受信任的代码具有使用反射访问和调用专用构造函数、方法、字段和属性所需的权限。

注释

如果使用标志授予ReflectionPermissionReflectionPermissionFlag.RestrictedMemberAccess调用方,并且非公共成员的授予集仅限于调用方授予集或子集,则此方法可用于访问非公共成员。 (请参阅 反射的安全注意事项

若要使用此功能,应用程序应面向 .NET Framework 3.5 或更高版本。

适用于

SetValue(Object, Object, BindingFlags, Binder, CultureInfo)

Source:
FieldInfo.cs
Source:
FieldInfo.cs
Source:
FieldInfo.cs
Source:
FieldInfo.cs
Source:
FieldInfo.cs

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

public:
 abstract void SetValue(System::Object ^ obj, System::Object ^ value, System::Reflection::BindingFlags invokeAttr, System::Reflection::Binder ^ binder, System::Globalization::CultureInfo ^ culture);
public abstract void SetValue(object? obj, object? value, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder? binder, System.Globalization.CultureInfo? culture);
public abstract void SetValue(object obj, object value, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, System.Globalization.CultureInfo culture);
abstract member SetValue : obj * obj * System.Reflection.BindingFlags * System.Reflection.Binder * System.Globalization.CultureInfo -> unit
Public MustOverride Sub SetValue (obj As Object, value As Object, invokeAttr As BindingFlags, binder As Binder, culture As CultureInfo)

参数

obj
Object

将设置其字段值的对象。

value
Object

要分配给字段的值。

invokeAttr
BindingFlags

一个字段 Binder ,指定所需的绑定类型(例如, Binder.CreateInstanceBinder.ExactBinding)。

binder
Binder

一组属性,用于通过反射实现参数类型的绑定、强制和调用成员。 null如果是binderBinder.DefaultBinding则使用。

culture
CultureInfo

特定区域性的软件首选项。

实现

例外

调用方无权访问此字段。

obj 参数是 null ,字段是实例字段。

对象上不存在该字段。

-或-

value不能转换参数并将其存储在字段中。

注解

此方法将分配给 value 此实例 obj所反映的字段。 如果该字段为静态字段, obj 将忽略。 对于非静态字段, obj 应是继承或声明该字段的类的实例。 新值作为一个 Object传递 。 例如,如果字段的类型为 Boolean,则传递具有相应布尔值的实例 Object 。 在设置值之前, SetValue 检查用户是否具有访问权限。

此方法不能用于可靠地设置静态、仅限初始化的字段(readonly 在 C#) 字段中的值。 在 .NET 中,如果尝试对静态仅限初始化的字段设置值,则会引发异常。

注释

完全受信任的代码具有使用反射访问和调用专用构造函数、方法、字段和属性所需的权限。

注释

如果使用标志授予ReflectionPermissionReflectionPermissionFlag.RestrictedMemberAccess调用方,并且非公共成员的授予集仅限于调用方授予集或子集,则此方法可用于访问非公共成员。 (请参阅 反射的安全注意事项

适用于