.Net中的早期绑定和后期绑定(一)

   “绑定”一词在生活是非常常见,像手机绑定、邮箱绑定等等。在.Net中也存在着“绑定”,比如说类型的绑定。在进行机房重构的过程中遇到一个特别有意思的现象:B层调用工厂层和接口使其与D层解耦,因此在B层类中的方法都写了这样的语句,以UserBLL类为例: 

    Public Function Login(enUser As Entity.UserEntity) As DataTable
        '实例化工厂类CreateUser
        Dim createuser As New Factory.CreateUser
        '通过工厂动态地创建D层中UserImpl
        Dim iuser = createuser.ProduceUser
	'返回DataTable对象
        Return iuser.SelectUser(enUser)
   End Function

     由于在UserBLL类中有多个方法,每个方法都存在"Dim createuser as new Factory.CreateUser"和"Dim iu=createuser.ProduceUser"这两行代码,这样就使用了重复的代码。于是乎,我把重复使用的这两句代码写到方法体之外了, 
    Dim createuser As New Factory.CreateUser
    '通过工厂动态地创建D层中UserImpl
    Dim iuser = createuser.ProduceUser   
    ''' <summary>
    ''' 验证登录信息
    ''' </summary>
    ''' <param name="enUser">实体UserEntity</param>
    ''' <returns>DataTable</returns>
    ''' <remarks></remarks>
    Public Function Login(enUser As Entity.UserEntity) As DataTable
        Return iuser.SelectUser(enUser)
    End Function

      原以为这样和之前没有差别,可是在写其他方法的时候,出现了问题。在方法中使用iu时,竟然找不到它的方法了,晕....但是当把重复的这两句代码写到方法里面就能找到,很纳闷这件事儿呢,有图为证:

    

     技术分享

       技术分享

    两句一模一样的代码写在不一样的位置引起的效果确实不一样的,有木有感到很有意思。为什么写到方法体之外后在方法中使用iuser时,找不到它的属性和变量呢?针对这个问题,自己做了很多方法去解决,经过我的各种尝试,终于找到了一种解决方法,如图:

     技术分享 

    对比第二张图和第三张图,同样是写在方法之外的两行代码,只是在“Dim iu=...”的基础上,加上了"Dim iu as IDAO.IUser=...",我们会发现在方法调用iu时能找到它的属性和方法了,那么问题来了,这又是为什么呢?上周日,文斌和我就这个问题讨论了好长一段时间,然后又查询了好多资料,终于皇天不负有心人。经过一个下午的鏖战,终于找到了问题的关键所在,也就是我们要说的早期绑定和后期绑定。请看下一篇文章.Net中的早期绑定和后期绑定(二)

    PS:大家可以做一下这个小实验,特别有趣!


郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。