重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
在项目中,程序集间的相互引用是经常遇到的。比如,主程序引用各分模块,各分模块引用公用程序集,以及平行的程序集间为了某些功能的实现也需要相互引用。这样的引用一方面是迫不得已的选择,而另一方面也反映出系统设计的水平。下面,简单介绍一下C#中的一种机制——反射。反射可以在避免某些情况下的程序集引用问题,比如主程序引用各功能模块的问题,当然其它模块间也是可以用反射的,只是使用是否方便这些问题需要在使用前根据实际情况进行考虑。本文以主程序加载分模块为例,介绍一下反射的使用。
所谓反射,就是对程序集或模块利用基础类型进行解析,然后还原出一个对象模型,在调用者工作域里运行的一个过程。其核心部分就是解析。工作原理是这样的。
无论你创建的多么结构复杂的类,归根结底都是由元数据构成的。如下,
成都网络公司-成都网站建设公司成都创新互联10多年经验成就非凡,专业从事成都做网站、网站制作,成都网页设计,成都网页制作,软文推广,广告投放平台等。10多年来已成功提供全面的成都网站建设方案,打造行业特色的成都网站建设案例,建站热线:028-86922220,我们期待您的来电!
public class Person { private string name; private int age; private string content; }
在程序编译时,编译器会创建类型表,字段表,方法表或其它表。再利用System.Reflection命名空间中的包含的类型进行解析,也可以看成对比的过程,将要被反射的程序集中的表读出,根据System.Reflection的基本类型,进行重组,从而还原出原来程序集的结构。
例如,序列化的过程就是使用了反射,序列化格式器将被序列化的对象中的字段的值获取出来,然后写入一个字节流,进行传输;因为字节流传输不容易出错或信息丢失。接收到字节流后,根据基本类型再还原出原对象的模型。
反射中,System.Type类型很重要,它遍历被反射的表中的类型和反射中的基本类型进行比较,然后判断出当前是什么类型。
简单了解了原理,那么再看如何使用的。
建一个工程,包含主程序和子程序集,如图
那么反射我们就有了一个直观的理解,里面的详细原理,下一篇继续介绍
代码下载