0614小总结关于反射。
0614总结
1反射:就是动态获取程序集中的元数据操作类型的。简单的理解就是通过元数据创建对象、调用对象成员等。或者就是直接通过.dll来创建对象,调用成员。
2.Type类实现反射的一个的重要的类,通过它我们获取类中的所有信息包括方法属性等。
通过类获得Type:Type t=typeof(Person);
没对象typeof之。
通过对象获得类的Type:Type t=p.GetType();
有对象new之然后点之。
3关于Assembly
Assembly asm=Assembly.FileLoad(“dll的全路径”);
调用Assembly的GetTypes()方法可以得到Assembly的所有类型。返回的是Type数组。
调用Assembly的GetExportedTypes()方法可以得到Assembly的public类型。
调用Assembly的GetType(name)方法可以得到Assembly定义全名为name的类型信息。
4.关于动态创建对象
Activator.CreateIntance(Type t)会动态调用类的无参构造函数来创建一个对象,返回值就是创建的对象,如果类没有无参构造函数就会报错。构造函数本身是默认有一个无参构造函数,写了就会覆盖掉无参的。故如要不报错,就不要写有参的构造函数,或者写了有参的,再手写一个无参的。
GetConstructor(参数列表);此就是找到带参数的构造函数。如果参数列表中没有,就是调用无参的默认构造函数。
5.Type类的方法:在编写调用插件的程序时,需要做一些验证。
IsAssignableFrom(Type c):字面意思就是是否可以从c中赋值。判断当前的类型的变量是不是可接受c类型变量赋值。可想到Activator.CreatInstance(Type t)也就是调用类的无参构造函数创建一个对象。两者可先写后一个创建对象,后判断可是。
IsInstanceOfType(object o):判断对象o是否是当前类的实例。当前类可以是o的父类、类或者接口。
IsSubclassOf(Type c):判断当前类是否是类c的子类。此判断与接口无关。
IsAbstract():判断是否是抽象的。包含接口。
6.静态类是一个抽象且密封的类。只要不能被实例化的就是抽象的。
7.Action是一定没有返回值的。
Func只有一个泛型版本的。没有非泛型版本的。它是一定有返回值的。
8.如果方法有返回值。直接调用Invoke的返回值。