什么是反射

Reflection,中文翻译为反射。
这是.Net中获取运行时类型信息的方式。参考:java反射

程序:我不知道用户要给我一个什么类型的东西。随便你给我什么,我拿到了这个东西,我再通过反射得知这是个什么东西。通过反射还可以知道这个东西里面有些什么玩意,知道了有些什么玩意,就可以操作这些玩意了。 以不变应万变的操作。

Type类

包含类型的特性。使用这个类的对象能让我们获取程序使用的类型的信息

Type

获取类型

先创建两个学生对象

  1. IPerson stu = new Student();
  2. Student stu2 = new Student();

GetType()

  1. Type t = stu.GetType();//得到一个Type类型的对象,这个对象里面包含了Student类的各种信息
  2. Type t2 = stu2.GetType();
  3. if (t == t2)
  4. {
  5. //true
  6. Console.WriteLine("一个类型的对象,他们创建的Type都是指向一个");
  7. }

typeof()

  1. Type t3 = typeof(Student);//把一个类转换成Type类型

获取构造器

  1. ConstructorInfo c1 = t.GetConstructor(null);//获取这个类的构造器对象,默认构造器参数就是null
  2. //如果构造器有参数的,传入一个Type[]数组,参数的类型,可以用typeof(int)等方式

获取方法

  1. //获取这个类里面的方法
  2. MethodInfo m1 = t.GetMethod("Eat");
  3. MethodInfo m2 = t.GetMethod("Run");
  4. MethodInfo m3 = t.GetRuntimeMethod("Eat", null);//根据名字或者参数类型来获取方法,

创建对象

  1. object obj = Activator.CreateInstance(t);//通过类型对象,来创建对象。有十几个重载,可以传入参数等
  2. object obj2 = c1.Invoke(null);//通过构造器创建对象,传入参数

执行方法

  1. //让新被反射出来的对象obj执行这个方法,乱传object对象类型是不匹配的
  2. m1.Invoke(obj, null);//第二个参数为方法的参数数组
  3. m2.Invoke(obj, null);

★Type总结

一个Type对象包含了很多方法,在编译器里打个点自己看。
去查Type的官方文档,列出了全部方法属性。
写个.Get就成出现很多,获取单个,全部,获取成员,属性,方法等所有都能通过 文档查到