自动属性
当定义了如下类时,编译器会自动为它生成一个隐藏的、名称不固定的私有字段(比如可能叫 <L_A>k__BackingField这类编译器生成的名字 )而不是代码里写的 name。所以当通过反射给 Name 属性赋值时,修改的是编译器生成的那个隐藏字段,和你手动定义的 name 无关。
解决方法
- 改用手动实现属性(让属性直接操作
name字段 )
public class Person
{
private string name;
public string Name
{
get { return name; }
set { name = value; }
}
}
- 反射直接操作
name字段(不通过属性)