FieldInfo.SetValue 方法   
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
将给定对象的字段值设置为给定值。
重载
| 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 -> unitmember this.SetValue : obj * obj -> unitPublic 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 或 可移植类库中,请改为 catch Exception 。
示例
以下示例设置字段的值,获取并显示值,修改字段,并显示结果。
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传递。 例如,如果字段的类型为 Boolean,则传递具有相应布尔值的 的 实例 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 -> unitPublic 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.CreateInstance 或 Binder.ExactBinding)的 Binder 的字段。
- binder
- Binder
启用绑定、 强制自变量类型和成员通过反射调用的属性集。 如果 binder 为 null,则使用 Binder.DefaultBinding。
- culture
- CultureInfo
特定区域性的软件首选项。
实现
例外
调用方没有权限来访问此字段。
              obj 参数是 null 且该字段为实例字段。
注解
此方法将分配给 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 或更高版本。