[摘要]
DynamicClassFactory,一个支持在VB6里实现继承,多态,重载的库,目前,DynamicClassFactory还在开发中,预计月底出测试版,届时提供网友下载使用.本文仅仅介绍对属性继承的实现,下一篇将集中介绍函数的继承多态重载,敬请关注.
[正文]
//是不是在为VB6对继承支持得不好而发愁?是不是在为VB6没有重载而发愁?有类似疑惑的话,请继续阅读,DynamicClassFactory将为您解开这些疑惑.
'//有的时候,在编程时,老感觉某个控件的属性少了点什么,比如Tag属性为什么只有一个?其实我们只是在想记录更多的信息
DimDynamicObjAsObject
SetDynamicObj=DynamicClassFactory.NewObj(Me.Text1)
'//从DynamicClassFactory中获得一个新类,该类将继承Text1的所有属性
Debug.PrintDynamicObj.Text
'//输出其文本
DynamicObj.Properties.Add"NewTag",[AString],"增加一个Tag属性"
Debug.PrintDynamicObj.NewTag
'//增加了一个属性NewTag,并试图访问
有的时候,我疑惑TextBox有Text属性,而DTpicker有Value属性,同出而异名,异曲而同工,能不能也通过Value来访问TextBox的Text属性呢?DynamicClassFactory将支持你这么做.
DimPropertyAsDynamicClassFactory.Property
SetProperty=DynamicObj.Properties("Text")
Property.Name="Value"
Debug.PrintDynamicObj.Value
'//这个时候,Value输出的是Text1的Text属性值
当然了,当我么访问DynamicObj.Text的时候,其实DynamicClassFactory返回的是一个Property对象,其有一个默认属性就是Value
由此,我们实现更改属性称谓的实现也可以通过下面方式来进行
DynamicObj.Text.Name="Value"
Debug.PrintDynamicObj.Value
VB6可以说称不上支持重载,我有的时候疑惑,为什么不能在设置Textbox的Enabled属性为False的同时,其背景色同时换成灰色?即,我是否可以有一个机制,可以让一个类继承了TextBox的大多属性的同时
对其Enabled属性有一个扩充(重载)?答案是否定的,VB6不提供类似机制.
而我的DynamicClassFactory做到了这一点
DynamicObj.Enabled=Flase
'//Text1将Disable,同时其背景色为灰
有的时候,我们取得一个记录集(ADODB.Recordset),在取值时候,要逐个字段判断其值是否为NULL,很烦恼.如果您有类似的烦恼,请阅读下去!
DimPropertiesAsDynamicClassFactory.Properties
DimSQLAsString
DimRecordsetAsADODB.Recordset
SQL="SELECTName,Age,SexFromStudentsInfo"
SetRecordset=g_Cn.Execute(SQL)
CallDynamicObj.Bind(Recordset)
这个时候DynamicObj将绑定到这个记录集,并按照这个记录集的字段生成相应属性,并支持访问
SetProperties=DynamicObj.Properties
ForEachPropertyInProperties
Debug.PrintProperty.Name&":"&Property.Value
Next
'//遍历属性成员
Debug.PrintDynamicObj.Name
'//访问属性成员
当然了,如果把DynamicObj的BoundMode设置成BoundAutomatic(自动绑定)时,则当Recordset的AbsolutePosition发生变动时候,DynamicObj各属性成员是动态刷新的,请看下面的例子
Recordset.MoveFirst
DynamicObj.BoundMode=BoundAutomatic
DoWhileNotRecordset.EOF
Debug.PrintDynamicObj.Name
Recordset.MoveNext
Loop
'//逐条输出学生的姓名
当然了也可以:
Recordset.MoveFirst
DynamicObj.BoundMode=BoundManual'//手动绑定
DoWhileNotRecordset.EOF
CallDynamicObj.Refresh'//手动刷新
Debug.PrintDynamicObj.Name
Recordset.MoveNext
Loop
'//逐条输出学生的姓名
DynamicClassFactory不仅支持对象创建时的继承运行中绑定Recordset,还支持运行中继承,支持对普通类实例或是单层结构的Type(UserDataType)进行继承
'//比如我们有如下的一个结构
PublicTypeLinkManType
NameAsString
CompanyAsString'//公司
TelephoneAsString'//电话
MobilePhoneAsString'//移动电话
PositionAsString'//职务
EndType
'//下面演示结构继承
DimLinkManAsLinkManType
LinkMan.Company="微软"
LinkMan.MobilePhone="1361920XXXX"
LinkMan.Name="周XX"
LinkMan.Position="经理"
LinkMan.Telephone="029-8888888"
CallDynamicObj.ExtendFrom(LinkMan)
Debug.PrintDynamicObj.Name
'//输出我的姓名
如果我们有一个类,有上述LinkManType的结构,其实例名称为cLinkMan,我们一样可以调用ExtendFrom来实现继承,至于手动对属性成员进行增删改,更是不在话下.
下次介绍函数重载及多态.敬请关注.