乐趣区

C之反射

为什么需要反射

  • 有时不知道具体的类型,可以通过 dll 去得到类的对象;
  • 某些特殊方法,传过来的是泛型类,需要通过反射处理某些特殊的业务;
  • 通用方法 DataTable 和 List<T> 的相互转化时需要用到反射;

怎样使用反射

得到对象的所有 public 成员

Type.GetMembers();

得到对象的所有 public 属性

Type.GetProperties();

得到对象的所有 public 字段

Type.GetFields();

得到对象的私有成员

Type.GetFields(BindingFlags.NonPublic | BindingFlags.Instance);

得到对象的静态成员

Type.GetMembers(BindingFlags.Public|BindingFlags.Static);

还有枚举类型等等,基本上都是在 BindingFlags 这个上面做处理。

/// 反射得到泛型类的实体
/// </summary>
/// <typeparam name="T"></typeparam>
/// <returns></returns>
public static T GetModel<T>()
{var model = default(T);
    // 得到对象的方法一:model = (T)typeof(T).GetConstructor(new System.Type[] {}).Invoke(new object[] {});
    // 得到对象的方法二:model = (T)Activator.CreateInstance(typeof(T));
    // 逻辑处理......            
    return model;
}
退出移动版