Vb 6 中的多态

Vb 6 中的多态

最近在写一个MDI窗体的程序,每调用一个子窗体时都要对其做一些操作。于是我就用一个SUB 来做显示子窗体的操作

       Private Sub showFrm(ByRef tFrm As Form)

       {代码。。。。。。}

       tFrm.show

End Sub

 

假设有两个子窗体 frmProduct产品列表,和frmUser用户列表,那么要在显示这两个窗体的地方就用

       call showFrm(frmProduct)

       call showFrm(frmUser)

frmProduct 是系统自动生成的Form类的对象(实体)。

当然系统中还有一个frmProduct类。他们两个只是名字一样。

这样在显示子窗体的时候调用的所有相关操作都放在showFrm中,在{代码。。。。。}中可以对tFrm的图标啊,前景色,大小啊什么的做想要的操作,以后修改起来也方便。我始终相信把实现相同功能的代码放不同的地方,或不用一个函数,或类什么的封装起来,以后会给自己带来更多的麻烦。

但是如果在showFrm中我要对frmProduct 中的一个变量 Public  strA as String操作,那么现在的showFrm 是做不到的。因为他只处理Form类,而strA是属于frmProduct类的。于是把showFrm改动一下

       Private Sub showFrm(ByRef tFrm As frmProduct)

       {代码。。。。。。}

       tFrm.show

End Sub

这样showFrm可以处理frmProductstrA 了。但是call showFrm(frmUser)会报错,为什么就不用我多说了,即便frmUser也有Public  strA as String 变量。

现在我希望showFrm即能处理 frmProduct strA 又能处理 frmUserstrA

是的 VB 6 能让我们实现这个showFrm。我首先想到的是接口,何为接口,接口,我个人认为接口是描述多个类的共同特征的类,是对多个类共性的描述。在VB工程中新建一个类 IfrmBase 如下:

      

Public Property Get strA() As String

 

End Property

 

 

Public Sub show() '显示子窗体

 

End Sub

 

IfrmBase 呵呵一看名字就知道为基础窗体接口,凡是子窗体都要符合IfrmBase的描述。

 

 

然后再告诉系统,frmProduct frmUser是符合IfrmBase描述的类。

 

frmProductfrmUser 中加入

 

Implements IfrmBase

 

'--------------------------

'接口实现部分

'---------------------------

Private Property Get IfrmBase_staA () As String

    IfrmBase_staA = Me.staA

End Property

Public Sub IfrmBase_show()

    Me.show

End Sub

 

Private Sub showFrm(ByRef tFrm As IfrmBase)

 {代码。。。。。}

 

 tFrm.show

 

End Sub

 

于是在调用子窗体的地方就可以写上代码

call showFrm(new frmProduct)

call showFrm(new frmUser)

 

看到这大家应该明白,showfrm()是具有多态的。他要处理的类在编译时是无法确定的,所以他是滞后联编的。我碰到过好多人多少对VB带有瞧不起的眼光,说vb实现不了多态。我只想说vb是优秀的开发工具。

此外我还想再多说几句。最近比较热的工厂模式。的确showFrm是符合生活中的处理模式的,它只对符合一定特征的物品做处理。

铁匠只多带铁的东西的出里。医生只对生病的人处理。打气筒只对球,轮胎,这中有气门芯,内封闭的物体打气。如果做出来的打气筒只能给皮球打气,要我就仍了算了呵呵。

 

 

本人第一写作,望各位多多支持!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
'------------------------------------------------------------------------------------------------------------------------------------------ '本示例旨在向您展示如何在VB6实现真正的继承,如何使用DyCOMHelper创建类,并使用,它将带您进入VB6背后的COM世界,看看我们的类是如何运行的。 'DyCOMHelper创建的对象的特点: '1、可以像VB6下定义的对象一样去使用,虽然不是VB6机制创建,但是可以被VB6当作对象来识别使用。 '2、支持后期绑定,支持错误处理,支持多接口等常规应用。 '3、支持真正意义上的继承,本示例将说明这一点。 '4、所创建的对象是轻量对象,实例占用的起步空间更小,约VB类的1/5。 '5、函数调用速度高出20% 左右 '6、实例创建的速度,最大可以提高近10倍 '7、释放速度,最大可以提高近100倍。(以上速度来自于极限测试数据) '8、创建模式比VB6更丰富,VB6的类实例,是在堆上进行创建的,效率很低,DyComHelper可以选择堆、堆栈是进行创建,也可以从某个结构上创建,也可以用内置的定长管理器进行创建。 '9、从类实例外部,访问内部数据时,支持真正意义的指针式访问。 '10、使用DyCOMHelper创建类,将让您的系统支持成千上万个类,而不会担心效率问题。 ' '读这个示例您可能会问的问题: ' 1、类型库,怎么来的?目前是我使用工具手动创建。未来,我将推出VB6插件,在VB6下直接书写代码生成类型库并自动引用。 ' '使用前,请先执行下列顺序: ' 1、引用 Types目录下 DyCOMHelperType.tlb,TestInheritLib.tlb。 ' 2、按F8开始逐步断点执行,看看它是如何工作的。 '示例,有三个类,Animal、Wolf、Demiwolf,分别是动物、狼、狼狗,狼狗继承自狼,狼继承自动物,动物派生自IDispatch。 '------------------------------------------------------------------------------------------------------------------------------------------
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值