【机房重构】——反射的机制


前言


  我是有时候会特别钻牛角尖和爱和自己较劲的人,

  在从三层升七层的过程中,在工厂中需要添加反射,这个反射是我陷入了深深的思考


内容


理论

  咱们先来看看百度百科中对于反射的定义:反射,一种计算机处理方式。是程序可以访问、检测和修改它本身状态或行为的一种能力

  通过定义,你能联想到咱们目前应用到的反射吗?对于我来说,还是比较抽象的。


实践

  咱们主要还是讨论机房重构中的反射。


  在设计模式中反射是这么写的。

  并且指明了要先引用命名空间,后面也依次指出了方法中是:当前“程序集”名;命名空间.类名

  大家只需要套用格式就好了。

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为 命名空间.类名


  下面就多提一点程序集和明明空间的关系,一个非常好的例子:

  命名空间只是说明一个类型是哪个族的,比如有人是汉族、有人是回族;而程序集表明一个类型住在哪里,比如有人住在北京、有人住在上海;那么北京有汉族人,也有回族人,上海有汉族人,也有回族人,这是不矛盾的。

  是类在逻辑和物理两个方面上的分类


总结

  

  我还是爱钻牛角尖

  

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值