反射(Reflection)
概述
让程序可以加载一个运行时才得知名称的类,获悉器完整构造,并生成其对象实体,或对其字段设值或者调用其方法。
C#、Java等语言是半动态化语言,不能所见即所得。反射式使程序拥有动态特性的一种重要机制。
应用场景
- 根据类名、类成员名来访问类或成员的信息或者进行一些操作。
- 根据指定的装箱类型,获取其属性或者调用其方法。
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)