C# 反射是一种强大的技术,可以在程序运行时动态地获取类型和成员的信息,并通过这些信息来创建对象、调用方法、获取属性和字段等等。下面是 C# 反射的一些常见用法和示例:

  1. 获取类型信息
// 获取类型信息
Type type = typeof(MyClass);

// 获取类型名称
string name = type.Name;

// 获取类型全名
string fullName = type.FullName;

// 获取类型命名空间
string 'namespace' = type.Namespace;

// 获取类型所在的程序集
Assembly assembly = type.Assembly;
  1. 创建对象
// 创建对象
MyClass obj = (MyClass)Activator.CreateInstance(typeof(MyClass));

// 创建泛型对象
Type genericType = typeof(List<>);
Type[] typeArgs = { typeof(string) };
Type concreteType = genericType.MakeGenericType(typeArgs);
object obj = Activator.CreateInstance(concreteType);
  1. 调用方法
// 获取方法信息
MethodInfo method = typeof(MyClass).GetMethod("MyMethod");

// 调用静态方法
method.Invoke(null, null);

// 调用实例方法
MyClass obj = new MyClass();
method.Invoke(obj, null);

// 调用泛型方法
MethodInfo genericMethod = typeof(MyClass).GetMethod("MyGenericMethod");
MethodInfo concreteMethod = genericMethod.MakeGenericMethod(typeof(string));
concreteMethod.Invoke(obj, null);
  1. 获取属性和字段
// 获取属性信息
PropertyInfo property = typeof(MyClass).GetProperty("MyProperty");

// 获取属性值
MyClass obj = new MyClass();
object value = property.GetValue(obj);

// 设置属性值
property.SetValue(obj, newValue);

// 获取字段信息
FieldInfo field = typeof(MyClass).GetField("MyField");

// 获取字段值
MyClass obj = new MyClass();
object value = field.GetValue(obj);

// 设置字段值
field.SetValue(obj, newValue);

C# 反射的使用场景包括但不限于:

  1. 动态创建对象和调用方法:在某些情况下,我们需要在程序运行时根据一些条件来创建对象和调用方法,这时候反射就非常有用。

  2. 插件化开发:在插件化开发中,我们需要动态加载程序集并创建对象,这时候反射是必不可少的。

  3. 序列化和反序列化:在序列化和反序列化过程中,我们需要读取和设置对象的属性和字段,这时候反射也可以派上用场。

  4. 动态生成代码:在某些场景下,我们需要动态地生成代码并编译执行,这时候反射也是非常有用的。


原文地址: https://www.cveoy.top/t/topic/mVze 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录