FieldInfo.SetValue 方法

定义

将给定对象的字段值设置为给定值。Sets the value of the field for the given object to the given value.

重载

SetValue(Object, Object)

设置给定对象支持的字段的值。Sets the value of the field supported by the given object.

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

在派生类中被重写时,设置给定对象支持的字段的值。When overridden in a derived class, sets the value of the field supported by the given object.

SetValue(Object, Object)

设置给定对象支持的字段的值。Sets the value of the field supported by the given object.

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

参数

obj
Object

将设置其字段值的对象。The object whose field value will be set.

value
Object

要分配给字段的值。The value to assign to the field.

实现

异常

适用于 Windows 应用商店应用的 .NET可移植类库中,改为捕获基类异常 MemberAccessExceptionIn the .NET for Windows Store apps or the Portable Class Library, catch the base class exception, MemberAccessException, instead.

调用方没有权限来访问此字段。The caller does not have permission to access this field.

适用于 Windows 应用商店应用的 .NET可移植类库中,改为捕获 ExceptionIn the .NET for Windows Store apps or the Portable Class Library, catch Exception instead.

obj 参数是 null 且该字段为实例字段。The obj parameter is null and the field is an instance field.

对象上不存在该字段。The field does not exist on the object.

- 或 --or- value 参数不能转换且不能存储在字段中。The value parameter cannot be converted and stored in the field.

示例

下面的示例设置字段的值,获取并显示值,修改字段并显示结果。The following example sets the value of a field, gets and displays the value, modifies the field, and displays the result.

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上由此实例反映的字段。This method will assign value to the field reflected by this instance on object obj. 如果该字段为静态字段,obj 将被忽略。If the field is static, obj will be ignored. 对于非静态字段,obj 应是继承或声明该字段的类的实例。For non-static fields, obj should be an instance of a class that inherits or declares the field. 新值作为 Object传递。The new value is passed as an Object. 例如,如果该字段的类型为布尔值,则传递使用适当布尔值的 Object 的实例。For example, if the field's type is Boolean, an instance of Object with the appropriate Boolean value is passed. 设置该值之前,SetValue 会检查用户是否具有访问权限。Before setting the value, SetValue checks to see if the user has access permission. 这最后一种方法是调用以下 SetValue 方法的便捷方法。This final method is a convenience method for calling the following SetValue method.

备注

完全受信任的代码具有使用反射访问和调用私有构造函数、方法、字段和属性所需的权限。Fully trusted code has the permissions that are needed to access and invoke private constructors, methods, fields, and properties using reflection.

备注

.NET Framework 2.0 Service Pack 1.NET Framework 2.0 Service Pack 1开始,此方法可用于访问非公共成员(如果已向调用方授予了 ReflectionPermissionFlag.RestrictedMemberAccess 标记 ReflectionPermission,以及非公共成员的授予集限制为调用方的授予集或其子集)。Starting with the .NET Framework 2.0 Service Pack 1.NET Framework 2.0 Service Pack 1, this method can be used to access non-public members if the caller has been granted ReflectionPermission with the ReflectionPermissionFlag.RestrictedMemberAccess flag and if the grant set of the non-public members is restricted to the caller's grant set, or a subset thereof. (请参阅反射的安全注意事项。)(See Security Considerations for Reflection.)

若要使用此功能,应用程序应为 .NET Framework 3.5.NET Framework 3.5 或更高版本。To use this functionality, your application should target the .NET Framework 3.5.NET Framework 3.5 or later.

安全性

ReflectionPermission
当通过 InvokeMember(String, BindingFlags, Binder, Object, Object[], ParameterModifier[], CultureInfo, String[])的机制后期绑定调用时。when invoked late-bound through mechanisms such as InvokeMember(String, BindingFlags, Binder, Object, Object[], ParameterModifier[], CultureInfo, String[]). 关联的枚举:MemberAccessAssociated enumeration: MemberAccess.

SecurityPermission
用于更新仅限初始字段。for updating init-only fields. 关联的枚举:SerializationFormatterAssociated enumeration: SerializationFormatter.

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

在派生类中被重写时,设置给定对象支持的字段的值。When overridden in a derived class, sets the value of the field supported by the given object.

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);
abstract member SetValue : obj * obj * System.Reflection.BindingFlags * System.Reflection.Binder * System.Globalization.CultureInfo -> unit

参数

obj
Object

将设置其字段值的对象。The object whose field value will be set.

value
Object

要分配给字段的值。The value to assign to the field.

invokeAttr
BindingFlags

指定所需的绑定类型(例如,BinderBinder.CreateInstance)的 Binder.ExactBinding 的字段。A field of Binder that specifies the type of binding that is desired (for example, Binder.CreateInstance or Binder.ExactBinding).

binder
Binder

启用绑定、 强制自变量类型和成员通过反射调用的属性集。A set of properties that enables the binding, coercion of argument types, and invocation of members through reflection. 如果 bindernull,则使用 Binder.DefaultBindingIf binder is null, then Binder.DefaultBinding is used.

culture
CultureInfo

特定区域性的软件首选项。The software preferences of a particular culture.

实现

异常

调用方没有权限来访问此字段。The caller does not have permission to access this field.

obj 参数是 null 且该字段为实例字段。The obj parameter is null and the field is an instance field.

对象上不存在该字段。The field does not exist on the object.

- 或 --or- value 参数不能转换且不能存储在字段中。The value parameter cannot be converted and stored in the field.

注解

此方法会将 value 分配给 obj上由此实例反映的字段。This method will assign value to the field reflected by this instance on obj. 如果该字段为静态字段,obj 将被忽略。If the field is static, obj will be ignored. 对于非静态字段,obj 应是继承或声明该字段的类的实例。For non-static fields, obj should be an instance of a class that inherits or declares the field. 新值作为 Object传递。The new value is passed as an Object. 例如,如果该字段的类型为 Boolean,则传递具有相应布尔值的 Object 的实例。For example, if the field's type is Boolean, an instance of Object with the appropriate Boolean value is passed. 设置该值之前,SetValue 会检查用户是否具有访问权限。Before setting the value, SetValue checks to see if the user has access permission.

备注

完全受信任的代码具有使用反射访问和调用私有构造函数、方法、字段和属性所需的权限。Fully trusted code has the permissions that are needed to access and invoke private constructors, methods, fields, and properties using reflection.

备注

.NET Framework 2.0 Service Pack 1.NET Framework 2.0 Service Pack 1开始,此方法可用于访问非公共成员(如果已向调用方授予了 ReflectionPermissionFlag.RestrictedMemberAccess 标记 ReflectionPermission,以及非公共成员的授予集限制为调用方的授予集或其子集)。Starting with the .NET Framework 2.0 Service Pack 1.NET Framework 2.0 Service Pack 1, this method can be used to access non-public members if the caller has been granted ReflectionPermission with the ReflectionPermissionFlag.RestrictedMemberAccess flag and if the grant set of the non-public members is restricted to the caller's grant set, or a subset thereof. (请参阅反射的安全注意事项。)(See Security Considerations for Reflection.)

若要使用此功能,应用程序应为 .NET Framework 3.5.NET Framework 3.5 或更高版本。To use this functionality, your application should target the .NET Framework 3.5.NET Framework 3.5 or later.

安全性

ReflectionPermission
当通过 InvokeMember(String, BindingFlags, Binder, Object, Object[], ParameterModifier[], CultureInfo, String[])的机制后期绑定调用时。when invoked late-bound through mechanisms such as InvokeMember(String, BindingFlags, Binder, Object, Object[], ParameterModifier[], CultureInfo, String[]). 关联的枚举:MemberAccessAssociated enumeration: MemberAccess.

SecurityPermission
用于更新仅限初始字段。for updating init-only fields. 关联的枚举:SerializationFormatterAssociated enumeration: SerializationFormatter.

适用于