C#高级(反射)

反射(能够通过非反射方式实现的功能,尽量不要用反射)

        通过反射获取类型

通过反射获取类型

【通过类名获取类别】

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
     0010 0000

   | 0000 0100
——————————
     0010 0000

        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 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值