什么是反射
Reflection,中文翻译为反射。
这是.Net中获取运行时类型信息的方式。参考:java反射
程序:我不知道用户要给我一个什么类型的东西。随便你给我什么,我拿到了这个东西,我再通过反射得知这是个什么东西。通过反射还可以知道这个东西里面有些什么玩意,知道了有些什么玩意,就可以操作这些玩意了。 以不变应万变的操作。
Type类
包含类型的特性。使用这个类的对象能让我们获取程序使用的类型的信息
获取类型
先创建两个学生对象
IPerson stu = new Student();
Student stu2 = new Student();
GetType()
Type t = stu.GetType();//得到一个Type类型的对象,这个对象里面包含了Student类的各种信息
Type t2 = stu2.GetType();
if (t == t2)
{
//true
Console.WriteLine("一个类型的对象,他们创建的Type都是指向一个");
}
typeof()
Type t3 = typeof(Student);//把一个类转换成Type类型
获取构造器
ConstructorInfo c1 = t.GetConstructor(null);//获取这个类的构造器对象,默认构造器参数就是null
//如果构造器有参数的,传入一个Type[]数组,参数的类型,可以用typeof(int)等方式
获取方法
//获取这个类里面的方法
MethodInfo m1 = t.GetMethod("Eat");
MethodInfo m2 = t.GetMethod("Run");
MethodInfo m3 = t.GetRuntimeMethod("Eat", null);//根据名字或者参数类型来获取方法,
创建对象
object obj = Activator.CreateInstance(t);//通过类型对象,来创建对象。有十几个重载,可以传入参数等
object obj2 = c1.Invoke(null);//通过构造器创建对象,传入参数
执行方法
//让新被反射出来的对象obj执行这个方法,乱传object对象类型是不匹配的
m1.Invoke(obj, null);//第二个参数为方法的参数数组
m2.Invoke(obj, null);
★Type总结
一个Type对象包含了很多方法,在编译器里打个点自己看。
去查Type的官方文档,列出了全部方法属性。
写个.Get
就成出现很多,获取单个,全部,获取成员,属性,方法等所有都能通过 文档查到