C# PropertyInfo类案例详解
简介
C# PropertyInfo类是System.Reflection命名空间下的一个类,用于描述类的属性成员。通过PropertyInfo类,可以获取类的属性的信息、值和元数据。
使用方法
获取属性信息
可以使用Type类的GetProperty()方法来获取类的属性信息,该方法接受一个字符串类型的参数,即要获取的属性名称。例如,下面是一个获取Student类中Name属性信息的例子:
class Program
{
static void Main()
{
PropertyInfo propertyInfo = typeof(Student).GetProperty("Name");
Console.WriteLine(propertyInfo.Name);
Console.WriteLine(propertyInfo.PropertyType);
Console.WriteLine(propertyInfo.CanRead);
Console.WriteLine(propertyInfo.CanWrite);
}
}
class Student
{
public string Name { get; set; }
public int Age { get; set; }
public string Address { get; set; }
}
输出结果:
Name
System.String
True
True
获取属性值
通过PropertyInfo类,可以获取属性的值。使用GetValue()方法获取属性值,它接受一个对象参数,即要获取属性值的对象。例如,下面是一个获取Student类中Name属性值的例子:
class Program
{
static void Main()
{
Student student = new Student { Name = "小明", Age = 18, Address = "北京市海淀区" };
PropertyInfo propertyInfo = typeof(Student).GetProperty("Name");
string name = (string)propertyInfo.GetValue(student);
Console.WriteLine("Name is {0}", name);
}
}
class Student
{
public string Name { get; set; }
public int Age { get; set; }
public string Address { get; set; }
}
输出结果:
Name is 小明
设置属性值
使用SetValue()方法进行设置属性值。它接受两个参数,第一个参数是要设置属性值的对象,第二个参数是要设置的属性值。例如,下面是一个设置Student类中Name属性值的例子:
class Program
{
static void Main()
{
Student student = new Student { Name = "小明", Age = 18, Address = "北京市海淀区" };
PropertyInfo propertyInfo = typeof(Student).GetProperty("Name");
propertyInfo.SetValue(student, "小红");
Console.WriteLine("Name is {0}", student.Name);
}
}
class Student
{
public string Name { get; set; }
public int Age { get; set; }
public string Address { get; set; }
}
输出结果:
Name is 小红
示例分析
示例一:使用反射更新对象的属性值
下面是一个示例,使用反射更新对象的属性值。
class Program
{
static void Main()
{
Student student = new Student { Name = "小明", Age = 18, Address = "北京市海淀区" };
Type type = typeof(Student);
PropertyInfo nameProperty = type.GetProperty("Name");
nameProperty.SetValue(student, "小红");
PropertyInfo ageProperty = type.GetProperty("Age");
ageProperty.SetValue(student, 20);
Console.WriteLine("Name is {0}, Age is {1}", student.Name, student.Age);
}
}
class Student
{
public string Name { get; set; }
public int Age { get; set; }
public string Address { get; set; }
}
输出结果:
Name is 小红, Age is 20
示例二:使用反射动态创建对象并设置属性值
下面是一个示例,使用反射动态创建对象并设置属性值。
class Program
{
static void Main()
{
Type type = typeof(Student);
object student = Activator.CreateInstance(type);
PropertyInfo nameProperty = type.GetProperty("Name");
nameProperty.SetValue(student, "小红");
PropertyInfo ageProperty = type.GetProperty("Age");
ageProperty.SetValue(student, 20);
PropertyInfo addressProperty = type.GetProperty("Address");
addressProperty.SetValue(student, "北京市海淀区");
Console.WriteLine("Name is {0}, Age is {1}, Address is {2}", nameProperty.GetValue(student), ageProperty.GetValue(student), addressProperty.GetValue(student));
}
}
class Student
{
public string Name { get; set; }
public int Age { get; set; }
public string Address { get; set; }
}
输出结果:
Name is 小红, Age is 20, Address is 北京市海淀区
结论
本文详细讲解了C# PropertyInfo类的使用方法和示例,其中包括获取属性信息、获取属性值、设置属性值等部分。PropertyValue类可以很方便地使用反射来操作对象的属性,动态创建对象、更新对象的属性等等。对于使用C#反射的开发者,PropertyValue类的掌握必不可少。