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的全路径”);

调用AssemblyGetTypes()方法可以得到Assembly所有类型。返回的是Type数组。

调用AssemblyGetExportedTypes()方法可以得到Assemblypublic类型。

调用AssemblyGetType(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的返回值。

 

 

posted @ 2013-06-17 01:03  公子若不胖天下谁胖  阅读(258)  评论(0编辑  收藏  举报