首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

在VB6下怎么实现继承,重载和多态-DynamicClassFactory

2012-03-03 
在VB6下如何实现继承,重载和多态----DynamicClassFactory//是不是在为VB6对继承支持得不好而发愁?是不是在

在VB6下如何实现继承,重载和多态----DynamicClassFactory
//是不是在为VB6对继承支持得不好而发愁?是不是在为VB6没有重载而发愁?有类似疑惑的话,请继续阅读,DynamicClassFactory   将为您解开这些疑惑.  
'//有的时候,在编程时,老感觉某个控件的属性少了点什么,比如   Tag   属性为什么只有一个?其实我们只是在想记录更多的信息  
    Dim   DynamicObj       As   Object  
    Set   DynamicObj   =   DynamicClassFactory.NewObj(Me.Text1)  
          '//从   DynamicClassFactory   中获得一个新类,该类   将继承   Text1   的所有属性  
    Debug.Print   DynamicObj.Text  
          '//输出其   文本  

    DynamicObj.Properties.Add   "NewTag ",   [A   String],   "增加一个   Tag   属性 "  
    Debug.Print   DynamicObj.NewTag  
          '//增加了一个属性   NewTag,并试图访问  

    有的时候,我疑惑   TextBox   有Text   属性,而   DTpicker   有   Value   属性,同出而异名,能不能也通过   Value   来访问   TextBox的Text属性呢?   DynamicClassFactory   将支持你这么做.  
    Dim   Property   As   DynamicClassFactory.Property  
    Set   Property   =   DynamicObj.Properties( "Text ")  
    Property.Name   =   "Value "  
    Debug.Print   DynamicObj.Value  
        '//这个时候,Value输出的是   Text1   的Text属性值  
当然了,当我么访问   DynamicObj.Text   的时候,   其实   DynamicClassFactory   返回的是一个   Property   对象,其有一个默认属性就是   Value  

由此,我们实现更改属性称谓的实现也可以通过下面方式来进行  
    DynamicObj.Text.Name   =   "Value "  
    Debug.Print   DynamicObj.Value  

    VB6可以说称不上支持重载,我有的时候疑惑,为什么不能在设置   Textbox   的   Enabled   属性为   False   的同时,其背景色同时换成灰色?即,我是否可以有一个机制,可以让一个类继承了   TextBox   的大多属性的同时  
      对其   Enabled   属性有一个扩充(重载)?答案是否定的,VB6不提供类似机制.  
      而我的   DynamicClassFactory   做到了这一点  

      DynamicObj.Enabled   =   Flase  
      '//Text1   将   Disable,同时其背景色为灰  

      有的时候   ,   我们取得一个记录集(ADODB.Recordset),   在取值时候,   要逐个字段判断其值是否为NULL,   很烦恼.如果您有类似的烦恼,   请阅读下去!  
    Dim   Properties   As   DynamicClassFactory.Properties  
    Dim   SQL                 As   String  
    Dim   Recordset     As   ADODB.Recordset  

    SQL   =   "SELECT   Name   ,Age   ,Sex   From   StudentsInfo "  
    Set   Recordset   =   g_Cn.Execute(SQL)  
    Call   DynamicObj.Bind(Recordset)  

    这个时候   DynamicObj   将绑定到这个记录集,并按照   这个记录集的字段生成相应属性,并支持访问  

    Set   Properties   =   DynamicObj.Properties  
    For   Each   Property   In   Properties  
      Debug.Print   Property.Name   &   ": "   &   Property.Value  
    Next  
        '//遍历属性成员  
    Debug.Print   DynamicObj.Name  
          '//访问属性成员  



    当然了,如果把   DynamicObj   的   BoundMode   设置成   BoundAutomatic(自动绑定)时,则当   Recordset   的   AbsolutePosition   发生变动时候,   DynamicObj   各属性成员是动态刷新的,请看下面的例子  
   
    Recordset.MoveFirst  
    DynamicObj.BoundMode   =   BoundAutomatic  

    Do   While   Not   Recordset.EOF  
        Debug.Print   DynamicObj.Name  
        Recordset.MoveNext  
    Loop  
        '//逐条输出学生的姓名  

    当然了也可以:  
    Recordset.MoveFirst  
    DynamicObj.BoundMode   =   BoundManual   '//手动绑定  
    Do   While   Not   Recordset.EOF  
        Call   DynamicObj.Refresh   '//手动刷新  
        Debug.Print   DynamicObj.Name  
        Recordset.MoveNext  
    Loop  
        '//逐条输出学生的姓名  

    DynamicClassFactory   不仅支持对象创建时的继承\运行中绑定   Recordset,还这次运行中继承,支持对普通类实例或是单层结构的   Type(UserDataType)   进行继承  
    '//比如我们有如下的一个结构  
    Public   Type   LinkManType  
        Name   As   String  
        Company   As   String           '//公司  
        Telephone   As   String       '//电话  
        MobilePhone   As   String   '//移动电话  
        Position   As   String         '//职务  
    End   Type  

    '//下面演示结构继承  
    Dim   LinkMan         As   LinkManType  

    LinkMan.Company   =   "微软 "  
    LinkMan.MobilePhone   =   "1361920XXXX "  
    LinkMan.Name   =   "周XX "  
    LinkMan.Position   =   "经理 "  
    LinkMan.Telephone   =   "029-8888888 "  
    Call   DynamicObj.ExtendFrom(LinkMan)  
    Debug.Print   DynamicObj.Name  
        '//输出   我的姓名  
      如果我们有一个类,有上述   LinkManType   的结构,其实例名称为   cLinkMan,我们一样可以调用   ExtendFrom   来实现继承,至于手动对属性成员进行增\删\改,更是不在话下.  
      下次介绍函数重载及多态.敬请关注.

[解决办法]
接分,有DynamicClassFactory dll下载吗
[解决办法]
有点意思。现在习惯了VB.net中OO的便利,回去VB6都不会写了。

热点排行