FieldInfo.SetValue 方法 (Object, Object)
设置给定对象支持的字段值。
程序集: mscorlib(在 mscorlib.dll 中)
异常 | 条件 |
---|---|
FieldAccessException |
调用方没有访问此字段的权限。 |
TargetException |
obj 参数为 null 并且该字段是一个实例字段。 |
ArgumentException |
对象上不存在该字段。 - 或 - value 参数无法转换并存储在该字段中。 |
此方法将 value 分配给此实例在 obj 对象上反映的字段。如果该字段是静态的,则将忽略 obj。对于非静态字段,obj 应是继承或声明该字段的类的实例。新值作为 Object 传递。例如,如果字段的类型为 Boolean,则传递带有相应 Boolean 值的 Object 的实例。在设置该值以前,SetValue 将检查用户是否有访问权限。此最终方法对于调用下列 SetValue 方法很方便。
注意 |
---|
完全受信任的代码具有使用反射来访问和调用私有构造函数、方法、字段和属性所需的权限。 |
注意 |
---|
从 .NET Framework 2.0 版 Service Pack 1 开始,如果已授予调用方带有 ReflectionPermissionFlag.RestrictedMemberAccess 标志的 ReflectionPermission,并且非公共成员的授予集限制为调用方的授予集或其子集,则此方法可用于访问非公共成员。(请参见 反射的安全注意事项。) 若要使用此功能,您的应用程序应面向 .NET Framework 3.5 版 或更高版本。 |
下面的示例将设置一个字段的值,获取并显示该值,然后修改该字段并显示结果。
1 using System; 2 using System.Reflection; 3 using System.Globalization; 4 5 public class Example 6 { 7 private string myString; 8 public Example() 9 { 10 myString = "Old value"; 11 } 12 13 public string StringProperty 14 { 15 get 16 { 17 return myString; 18 } 19 } 20 } 21 22 public class FieldInfo_SetValue 23 { 24 public static void Main() 25 { 26 Example myObject = new Example(); 27 Type myType = typeof(Example); 28 FieldInfo myFieldInfo = myType.GetField("myString", 29 BindingFlags.NonPublic | BindingFlags.Instance); 30 31 // Display the string before applying SetValue to the field. 32 Console.WriteLine( " The field value of myString is "{0}".", 33 myFieldInfo.GetValue(myObject)); 34 // Display the SetValue signature used to set the value of a field. 35 Console.WriteLine( "Applying SetValue(Object, Object)."); 36 37 // Change the field value using the SetValue method. 38 myFieldInfo.SetValue(myObject, "New value"); 39 // Display the string after applying SetValue to the field. 40 Console.WriteLine( "The field value of mystring is "{0}".", 41 myFieldInfo.GetValue(myObject)); 42 } 43 } 44 45 /* This code example produces the following output: 46 47 The field value of myString is "Old value". 48 Applying SetValue(Object, Object). 49 The field value of mystring is "New value". 50 */
- ReflectionPermission
用于在非公共成员的授予集限制为调用方的授予集或其子集时,访问非公共字段。关联枚举:ReflectionPermissionFlag.RestrictedMemberAccess
- ReflectionPermission
无论其授予集是什么,都用于访问非公共字段。关联枚举:ReflectionPermissionFlag.MemberAccess
- ReflectionPermission
当通过类似 Type.InvokeMember 的机制以后期绑定的形式进行调用时。关联的枚举:ReflectionPermissionFlag.MemberAccess。
- SecurityPermission
用于更新 init-only 字段。关联枚举:SecurityPermissionFlag.SerializationFormatter。
Windows 7, Windows Vista SP1 或更高版本, Windows XP SP3, Windows XP SP2 x64 Edition, Windows Server 2008(不支持服务器核心), Windows Server 2008 R2(支持 SP1 或更高版本的服务器核心), Windows Server 2003 SP2
.NET Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表,请参见.NET Framework 系统要求。