文章目录
C#中的反射(Reflection)是.NET框架提供的一种强大的运行时元编程机制,它允许程序在运行时获取类型信息、创建对象实例、调用方法、访问字段和属性等,而这些操作在编译时可能是未知的。以下是几个使用反射的典型场景:
1. 动态加载和调用类的方法
假设有一个库包含多个实现了同一接口的类,用户可以通过配置文件指定要使用的具体类名和方法名。通过反射,可以在运行时根据配置加载相应的类型,并调用指定的方法。
// 假设有个接口和其实现类
public interface ICalculator
{
int Calculate(int a, int b);
}
public class Adder : ICalculator
{
public int Calculate(int a, int b) => a + b;
}
// 配置中读取类名
string className = "Adder";
Type calculatorType = Type.GetType(className);
// 创建实例并调用方法
ICalculator calculator = (ICalculator)Activator.CreateInstance(calculatorType);
int result = calculator.Calculate(3, 5);
2. 记录用户修改行为
如您提到的应用场景,系统需要记录用户修改了哪个实体类的哪些字段。通过反射,可以遍历实体类的所有属性,在用户修改后记录下变化的属性名和新旧值。
public class User
{
public string Name {
get; set; }
public int Age {
get; set; }
// 其他属性...
}
// 用户更新了一个User实例