ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

属性反射是用PropertyInfo类来实现

2020-10-26 14:01:24  阅读:215  来源: 互联网

标签:反射 调用 Assembly 类型 类来 PropertyInfo 字符串 属性


反射是架构师必会的基础,因为任何一个被设计出来的框架,都要使用反射。反射也是最隐蔽的语法,因为反射写出来后,通常它会被直接封装,然后调用者就只负责使用,不再关注他的具体实现。这与它的特性有关,因为反射就是为了减少代码冗余而存在的,所以,看不见很正常。

反射的定义

官方定义:反射提供了封装程序集、模块和类型的对象(Type 类型)。可以使用反射动态创建类型的实例,将类型绑定到现有对象,或从现有对象获取类型并调用其方法或访问其字段和属性。如果代码中使用了属性,可以利用反射对它们进行访问。

看不懂?没关系,我们把它翻译成人类可理解的语言。

C#编程语言中,最常使用的是类和类中的函数和属性。正向调用的方法是,创建类,然后用类创建一个对象。接下来就可以用这个对象调用类中的方法和属性了。

而反射,就是相对于这种正向调用的存在。即,它是反向调用。

反射可以通过类名的字符串来创建类,可以通过函数名的字符串和属性名的字符串,来调用类下的函数和属性。

有同学会问了, 既然正向可以调用,那么反向调用干什么呢?

会有这种问题的同学,先别着急,继续往下看,反射既然存在,就必然有存在的道理。

在代码中我们看到,反射时传递了字符串"Syntax.Kiba",然后通过解析字符串,获取到了该字符串对应的类的类型,最后再借助Activator来辅助创建类的实例。

其中字符串"Syntax.Kiba"是一个完全限定名。什么是完全限定名?完全限定名就是命名空间+类名。在反射的时候,需要我们传递完全限定名来确定到底要去哪个命名空间,找哪个类。

在代码中我们还可以看到,获取类型的方式有两种,一种是较复杂的,一种是简单的。

GetType2方法是简单的获取类别,通过Type直接就解析了字符串。而GetType则先进行了加载Assembly(组件),然后再由组件获取类型。

两者有什么区别呢?

区别是,用Type直接解析,只能解析当前命名空间下的类。如果该类存在于引用的DLL中,就解析不了。

而GetType方法中的[Assembly.Load指定了程序集名],所以,在反射时,就会去指定的命名空间里找对应的类。这样就能找到非本程序集下的类了。

[Assembly.Load指定了程序集名]这句话不好理解?

没关系,换个表达,Assembly.Load指定了命名空间的名称,所以反射时,会去这个命名空间里找类,这样是不是就好理解了。

标签:反射,调用,Assembly,类型,类来,PropertyInfo,字符串,属性
来源: https://www.cnblogs.com/Fqqccc/p/13878132.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有