.Net反射基础

Assembly:封装程序集信息,可以动态加载程序集

获取Assembly的几种方式:

1、var ass1 = Assembly.Load("ClassLibrary1");//项目中已引用此程序集,可以使用这种方法

2、var ass2 = Assembly.LoadFrom("c://xxxx.dll");//根据程序集全路径获取Assembly

3、var ass3 = personType.Assembly;//指定Type所在的Assembly

4、var ass4 = Assembly.GetAssembly(personType);//同上

5、var ass5 = Assembly.GetExecutingAssembly();//包含程序入口的程序集

Type:封装反射得到的类信息,也可以通过它反射创建一个对象

获取Type对象的几种方式:

1、assembly.GetType("反射Demo.Person");
2、Type.GetType("反射Demo.Person");
3、typeof(Person);
4、new Person().GetType();

Type对象的常用属性:

        animalType.IsArray//是否是数组类型
            animalType.IsImport//是否是COM类型库导入
            animalType.IsVisible//是否可由程序集之外的代码访问
            animalType.IsNestedPublic//如果类是嵌套的并且声明为公共的,则为 true;否则为 false。
            animalType.IsNestedAssembly//是否是嵌套的并且只能在它自己的程序集内可见。
            animalType.IsNestedFamily//是否是嵌套的并且只能在它自己的家族内可见。
            animalType.IsNested//嵌套在另一个类型内
            animalType.Namespace//命名空间
            animalType.BaseType//直接继承Type
            animalType.AssemblyQualifiedName//程序集限定名
            animalType.IsSealed//是否声明为密封的
            animalType.FullName//获取该类型的完全限定名称,包括其命名空间,但不包括程序集。
            animalType.Assembly//获取在其中声明该类型的 System.Reflection.Assembly
            animalType.Module//获取在其中定义当前 System.Type 的模块 (DLL)。
            animalType.GUID//获取与 System.Type 关联的 GUID。

Type对象的常用方法: 

       var personType = typeof(Person);
            personType.GetProperties();
            personType.GetProperty("Name");
            personType.GetFields();
            personType.GetField("_name");
            personType.GetMethods();
            personType.GetMethod("SayHello");
            personType.GetMembers();
            personType.GetMember("Name");
            personType.MakeGenericType(new Type[] { typeof(string) }).GetMethod("SayHello").Invoke(obj);//为泛型对象指定泛型类型

 MethodInfo成员:

mi.MakeGenericMethod(new Type[]{typeof(string)}).Invoke(obj,null);//为泛型方法指定泛型类型

猜你喜欢

转载自www.cnblogs.com/fanfan-90/p/11961224.html