FieldInfo.SetValue 方法
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
将给定对象的字段值设置为给定值。
重载
| 名称 | 说明 |
|---|---|
| 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请改为捕获基类异常。
示例
以下示例设置字段的值、获取和显示值、修改字段并显示结果。
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.CreateInstance 或 Binder.ExactBinding)。
- binder
- Binder
一组属性,用于通过反射实现参数类型的绑定、强制和调用成员。
null如果是binder,Binder.DefaultBinding则使用。
- culture
- CultureInfo
特定区域性的软件首选项。
实现
例外
调用方无权访问此字段。
该 obj 参数是 null ,字段是实例字段。
注解
此方法将分配给 value 此实例 obj所反映的字段。 如果该字段为静态字段, obj 将忽略。 对于非静态字段, obj 应是继承或声明该字段的类的实例。 新值作为一个 Object传递 。 例如,如果字段的类型为 Boolean,则传递具有相应布尔值的实例 Object 。 在设置值之前, SetValue 检查用户是否具有访问权限。
此方法不能用于可靠地设置静态、仅限初始化的字段(readonly 在 C#) 字段中的值。 在 .NET 中,如果尝试对静态仅限初始化的字段设置值,则会引发异常。
注释
完全受信任的代码具有使用反射访问和调用专用构造函数、方法、字段和属性所需的权限。
注释
如果使用标志授予ReflectionPermissionReflectionPermissionFlag.RestrictedMemberAccess调用方,并且非公共成员的授予集仅限于调用方授予集或子集,则此方法可用于访问非公共成员。 (请参阅 反射的安全注意事项。