C#通过反射类给私有属性赋值
C#中的属性可以有get,set访问器,可以很方便的实现对于属性的访问控制。
通常情况下,为了不让别人随意去修改我们的属性,会把属性值设置成private.
声明一个学生类
public class Student
{
public string Name { get; private set}=“baji";
public int Id { get; set; }
}
实例化一个Student对象
Student student=new Student();
student.Id=100;
//但是这里没法对设置student对象的Name属性,
student.Name="zhang san";//这行代码编译都不会通过,因为访问权限不够,不能进行赋值
//此时想要改变Name属性,可以通过反射的方式去修改
完整的演示代码
using System;
namespace ConsoleApp1
{
internal class Program
{
static void Main(string[] args)
{
//找到我们想要修改的属性名称
var setName = "Name";
var instance = Activator.CreateInstance(typeof(Student)) as Student;
if (instance != null)
{
System.Reflection.PropertyInfo[] propertyInfos = instance.GetType().GetProperties();
foreach (var item in propertyInfos)
{
if (setName.Equals(item.Name))
{
item.SetValue(instance, "zhangsan");
}
}
}
//这里输出可以看到,private set的属性被我们成功的改成了"zhangsan"
Console.WriteLine(instance.Name);
Console.ReadKey();
}
}
public class Student
{
public string Name { get; private set; } = "baji";
public int Id { get; set; }
}
}