前言
我是有时候会特别钻牛角尖和爱和自己较劲的人,
在从三层升七层的过程中,在工厂中需要添加反射,这个反射是我陷入了深深的思考
内容
理论
咱们先来看看百度百科中对于反射的定义:反射,一种计算机处理方式。是程序可以访问、检测和修改它本身状态或行为的一种能力
通过定义,你能联想到咱们目前应用到的反射吗?对于我来说,还是比较抽象的。
实践
咱们主要还是讨论机房重构中的反射。
在设计模式中反射是这么写的。
并且指明了要先引用命名空间,后面也依次指出了方法中是:当前“程序集”名;命名空间.类名
大家只需要套用格式就好了。
using System.Reflection;
IUser result=(IUser)Assembly.Load("抽象工厂").CreateInstance("抽象工厂模式.SqlseverUser");
而到了VB.NET版的机房重构时变成了:
Imports System.Reflection
Imports System.Text
Imports IDAL
Return CType(Assembly.Load(AssemblyName).CreateInstance(className), ILogin)
在我理解时,就以为从CType后面的全都是反射,反射也就是这么点用了。原来。。。
这压根就是两个东西。
CType函数
CType函数作用于两个参数。第一个参数是将要转换的表达式,第二个参数是目标类型或对象类。注意,第一个参数必须是表达式,不能是类型。
CType函数是一个内联函数,这意味着转换是由已编译的代码执行的,通常不会生成函数调用,这将提高性能。
返回表达式显示的转换为指定的数据类型、对象、结构、类或者接口后的结果。
而在反射的用途中的第一条即:
使用Assembly定义和加载程序集,加载在程序集清单中列出的模块,以及从此程序集中查找类型并创建该类型的实例。
在机房中的应用也表现为:
Assembly.Load(AssemblyName):动态的加载程序集
CreateInstance(className):创建类的实例
整体的则表现为利用反射通过程序集合命名空间动态加载创建类,并通过CType函数转换为接口
通过设计模式的例子能推出
AssemblyName为 程序集
className为 命名空间.类名
下面就多提一点程序集和明明空间的关系,一个非常好的例子:
命名空间只是说明一个类型是哪个族的,比如有人是汉族、有人是回族;而程序集表明一个类型住在哪里,比如有人住在北京、有人住在上海;那么北京有汉族人,也有回族人,上海有汉族人,也有回族人,这是不矛盾的。
是类在逻辑和物理两个方面上的分类
总结
我还是爱钻牛角尖