zhouqijie

反射(Reflection)

概述

让程序可以加载一个运行时才得知名称的类,获悉器完整构造,并生成其对象实体,或对其字段设值或者调用其方法。

C#、Java等语言是半动态化语言,不能所见即所得。反射式使程序拥有动态特性的一种重要机制。

应用场景

  1. 根据类名、类成员名来访问类或成员的信息或者进行一些操作。
  2. 根据指定的装箱类型,获取其属性或者调用其方法。

Type

获取Type的方式:
typeof(Klass)
obj.GetType()
Type.GetType("Klass")

构造对象

方法1:
Object obj = type.GetConstructor(new Type[]{...}).Invoke(new Object[]{...});

方法2:
Object obj = Activator.CreateInstance(type, new Object[]{...});

方法3:
Assembly assmbly = Assembly.Load("ReflectionTest");
Object obj = assembly.CreateInstace("ReflectionTest.MyClass");

获取成员信息

FieldInfo field = type.GetField();
MethodInfo method = type.GetMethod();
PropertyInfo property = type.GetProperty();

匿名对象

object a = new { name = "REW", age = 999 };
a.GetType().GetProperty("name").GetValue(a);

(END)