反射(能够通过非反射方式实现的功能,尽量不要用反射)
通过反射获取类型
通过反射获取类型 | 【通过类名获取类别】 System.Type t = typeof(PersonNameSpace.Person) |
【通过对象,获取类别】 PersonNameSpace.Person p = new PersonNameSpace.Person(); System.Type t = p.GetType(); | |
【通过类名的字符串,获取类别】 System.Type t2 = System.Type.GetType("System.String"); |
Type类
属性 | 介绍 | |
Name | 数据类型名 | |
FullName | 数据类型的完全名(包括命名空间名)【全名】 | |
Namespace | 定义数据类型的命名空间名 | |
IsAbstract | 指示该类型是否是抽象类型 | |
IsArray | 指示该类型是否是数组 | |
IsClass | 指示该类型是否是类 | |
IsEnum | 指示该类型是否是枚举 | |
IsInterface | 指示该类型是否是接口 | |
IsPublic | 指示该类型是否是公有的 | |
IsSealed | 指示该类型是否是密封类 | |
IsValueType | 指示该类型是否是值类型 | |
AssemblyQualifiedName | 程序集+命名空间+类名 是Type.GetType(str)中的字符串 | |
BaseType | 父类类型 | |
方法 | 介绍 | |
GetMember() GetMembers() | 返回MemberInfo类型,用于取得该类的所有成员的信息 | |
GetConstructor() GetConstructors() | 返回ConstructorInfo类型,用于取得该类构造函数的信息 | |
GetEvent() GetEvents() | 返回EventInfo类型,用于取得该类事件的信息 | |
GetInterface() GetInterfaces() | 返回InterfaceInfo类型,用于取得该类实现的接口的信息 | |
GetField() GetFields() | 返回FieldInfo类型,用于取得该类的字段(成员变量)的信息 🌟GetFields()会访问所有字段包括静态和非静态 | |
GetProperty() GetProperties() | 返回PropertyInfo类型,用于取得该类属性的信息 | |
GetMethod() GetMethods() | 返回MethodInfo类型,用于取得该类方法的信息 |
FieldInfo
获取字段 | t.GetField(字段名,访问权限BindingFlags | 静态非静态BindingFlags) |
读写字段 | Info.SetValue(对象,值) object obj = info.GetValue(对象) 静态字段不需要对象,设置为null |
获取字段特性 | Attributes获取与此字段关联的特性 CustomAttributes获取包含此成员自定义属性的集合 |
![]() |
MethodInfo
获取方法 | t.GetMethod(String,BindingFlags,Binder,Type[],ParameterModifier[]) |
调用方法 | info.Invoke(Object,BindingFlags,Binder,Object[],CultureInfo) |
获取方法特性 | Attributes获取与此字段关联的特性 CustomAttributes获取包含此成员自定义属性的集合 |
![]() ![]() |
MemberInfo
获取成员 | t.GetMember(string) |
MemberTypes(成员类型) | All 191(指定所有成员类型) |
Constructor 1(指定该成员是构造函数) | |
Custom 64(指定该成员是自定义成员类型) | |
Event 2 (指定该成员是事件) | |
Field 4(指定该成员是字段) | |
Method 8(指定该成员是方法) | |
NestedType 128(指定该成员是嵌套类型) | |
Property 16(指定该成员是属性) | |
TypeInfo 32(指定该成员是类型) | |
![]() |
BindingFlags
BindingFlags (表示搜索的按位组合) | 搜索使用的枚举值 |
Public(公共)16 | |
NonPublic(私有)32 | |
Static(静态)8 | |
Instance(非静态)4 | |
组合:eg私有的且非静态的NonPublic Instance | |
NonPublic | Instance | 0000 0100 |
Activator
CreateInstance(Type t) | 使用默认Public无参构造实例化对象![]() |
CreateInstance(Type t,bool nonPublic) | 使用私有的无参构造实例化对象 |
CreateInstance(Type t,params object[] args) | 使用Public有参构造函数实例化对象![]() |
CreateInstance(Type t,BindingFlags,Binder,object[] args,CultureInfo) | 使用私有有参构造函数实例化对象 BindingFlags.NonPublic|BindingFlags.Instance |