FieldInfo.SetValue 方法

定义

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

重载

SetValue(Object, Object)

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

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

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

SetValue(Object, Object)

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

要分配给字段的值。

实现

例外

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

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

obj 参数是 null 且该字段为实例字段。

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

对象上不存在该字段。

- 或 -

value 参数不能转换且不能存储在字段中。

示例

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

using namespace System;
using namespace System::Reflection;
using namespace System::Globalization;

public ref class Example
{
private:
   String^ myString;

public:
   Example()
   {
      myString = "Old value";
   }

   property String^ StringProperty 
   {
      String^ get()
      {
         return myString;
      }
   }
};

int main()
{
    Example^ myObject = gcnew Example;
    Type^ myType = Example::typeid;
    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 produces the following output:

The field value of myString is "Old value".
Applying SetValue(Object, Object).
The field value of mystring is "New 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 方法的便捷方法。

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

注意

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

注意

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

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

适用于

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

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.CreateInstanceBinder.ExactBinding)的 Binder 的字段。

binder
Binder

启用绑定、 强制自变量类型和成员通过反射调用的属性集。 如果 bindernull,则使用 Binder.DefaultBinding

culture
CultureInfo

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

实现

例外

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

obj 参数是 null 且该字段为实例字段。

对象上不存在该字段。

- 或 -

value 参数不能转换且不能存储在字段中。

注解

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

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

注意

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

注意

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

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

适用于