【.NET反射】基础

Assembly

加载程序集的3中方式

//1.1 Load方法:动态默认加载当前路径下的(bin)下的dll文件,不需要后缀
Assembly assembly = Assembly.Load("DB.SQLServer");
//1.2 LoadFile方法:程序集的绝对路径
Assembly assembly2 = Assembly.LoadFile(@"D:\我的框架之路\DotNet体系\02-DotNet进阶\02-反射\01-code\Reflection\bin\Debug\DB.SQLServer.dll");
//1.3 LoadFrom方法:可以是当前路径(需要写上后缀.dll),也可以是绝对路径
Assembly assembly3 = Assembly.LoadFrom("DB.SQLServer.dll");

获取程序集中的类

Type[] t1 = assembly.GetTypes();
Type tItem = assembly.GetType("DB.SQLServer.DBHelper");

Type

属性:

Assembly:获取包含指定类型的程序集。
BaseType:获取当前类型的基类。
FullName:获取类型的完全限定名称,包括命名空间。
IsAbstract:获取一个值,该值指示类型是否为抽象类型。
IsClass:获取一个值,该值指示类型是否为类。
IsEnum:获取一个值,该值指示类型是否为枚举类型。
IsInterface:获取一个值,该值指示类型是否为接口。
IsValueType:获取一个值,该值指示类型是否为值类型。
Name:获取类型的名称。
Namespace:获取类型的命名空间。
IsGenericType:获取一个值,该值指示类型是否为泛型类型。
IsArray:获取一个值,该值指示类型是否为数组类型。
IsPrimitive:获取一个值,该值指示类型是否为基元类型(如int、double等)。
IsSealed:获取一个值,该值指示类型是否为密封类型。

方法:

GetProperties():获取指定类型的所有公共属性。
GetFields():获取指定类型的所有公共字段。
GetMethods():获取指定类型的所有公共方法。
GetConstructors():获取指定类型的所有公共构造函数。
GetInterfaces():获取指定类型实现的所有接口。
GetEvents():获取指定类型的所有公共事件。
GetMembers():获取指定类型的所有成员。
GetElementType():获取数组类型的元素类型。
GetGenericTypeDefinition():获取泛型类型的定义。
GetNestedTypes():获取嵌套在当前类型中的所有类型。

TypeInfo

TypeInfo是Type类的子类

var type = typeof(int);

// Type -> TypeInfo
var typeInfo = type.GetTypeInfo();

//TypeInfo -> Type
typeInfo.AsType();

反射创建对象(Activator)

//获取程序集中的特定类
Type tItem = assembly.GetType("DB.SQLServer.ReflectionTest");
 //无参构造函数
Activator.CreateInstance(tItem);
 //一个参数的构造函数
Activator.CreateInstance(tItem ,"1");
//两个参数的构造函数
 Activator.CreateInstance(tItem , 1,"2");
posted @ 2019-11-30 06:21  .Neterr  阅读(348)  评论(0编辑  收藏  举报