我们在做机房收费系统用到了反射,但是只是知道这么简单的使用,但没想我们为 什么使用它?
化繁为简,还是那个哲学上经典的提问(你是谁?你从哪里来?你到哪里去?)?
(1)反射是什么东东呢?
想到”反射”这概念,我们日常生活中,印象最深刻的是可能就是:光的反射
而在设计模式中反射的概念:
要指程序可以访问、检测和修改它本身状态或行为的一种能力。
这听起来真晕啊!毕竟是浅谈,我们还是拿例子说事吧。
我们只要在程序的顶端写上using system.Reflection ;这样就可以应用反射了。
反射的格式: Assembly.Load("程序集名称").CreateInstance(“命名空间.类的名称”)
Assembly.Load(“程序集名称”)这个方法:表示动态加载程序集。
CreateInstance(“命名空间.类的名称”)这个方法:表示创建类的实例。
谈到这儿,那就不得不说明什么是“程序集”和“命名空间”了。
程序集(Assembly):通常来说一个项目就是一个程序集。例如我们做的7层架构
的机房收费系统,就表示有7个程序集(至于这么划分程序集,对于初学者挺难)
命名空间(namespace):引入它的目的,主要避免一个项目中,存在相同的对象名的冲突。查阅了一些高 手的博客:他们是这样比喻的:命名空间就像我们中国姓氏中的“姓”,每个对象的名字就像姓名中的“名”。
而程序集和命名空间的关系不一定是一一对应的,也不互补包含。
这里默认程序集名称和命名空间是一致的,这里修改的,如果不一致,会出现动态 生成时找不到类,这样的错误。因此这里最好把他们设置一致。
程序集包含模块,而模块包含类型,类型又包含成员。反射则提供了封装、 模块和类型的对象
(2)为什么要使用反射?
大家都懂的:如果我们不使用反射:就把实例化写死在程序里了。
而反射是利用字符串来实例化对象,而字符串是可以写成变量的 而变量是可以更换的。这也是反射的核心所在!