Vb 6 中的多态

原创 2004年01月26日 01:34:00

Vb 6 中的多态<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

最近在写一个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是符合生活中的处理模式的,它只对符合一定特征的物品做处理。

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

 

 

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

VB.net学习笔记(十四) 反射、多态

.Net中的反射使用入门 http://blog.csdn.net/timmy3310/article/details/12615 反射的概念是由Smith在1982年首次提出的,主要是指程序...
  • dzweather
  • dzweather
  • 2013年08月20日 19:46
  • 3983

深入理解重载和重写及与之相关的多态性

重载和重写除了在名称上有些相似之外,其实是完全不同的两个东西。 重载的目的是使得我们能够用用一个统一的接口名称来调用一系列方法。这些方法的目的也许是一样的,但是它们的实现方式会根据传入的参数...
  • u013063153
  • u013063153
  • 2015年11月08日 14:14
  • 829

Vb中 继承 多态的实现

说到继承这里首先说下类成员访问的方式,有三种,public,private, friend Public是完全公开的,外部可以随时进行修改,这个不是很安全,所以类里使用公有变量安全性差,若改为私...
  • chaoji823
  • chaoji823
  • 2014年05月02日 08:59
  • 790

VB6给MDI窗口(父窗口)动态绘制背景的种种方法

VB6就不说了,要快速写一个程序,.NET(C#)可能还更好更强大,但是要说安全,VB6反到强过他们 有时候两者就是一种矛盾,所以越是用户友好,越是易维护和扩展的程序,越容易被破解. ...
  • prsniper
  • prsniper
  • 2013年08月18日 06:12
  • 2009

回顾vb(多态)

由于vb是基于对象没有完全面向对象所以vb也就没有继承。但是vb可以实现向C++和Java一样的继承的功能(个人理解),所以vb也算是有继承了。面向对象的编程理念是抽象——封装——继承——多态。我的理...
  • u013036959
  • u013036959
  • 2014年09月12日 12:42
  • 840

VB6基本数据库应用(一):数据库基础

这是本套教程的第一课,讲述的是数据库结构的基础。学好数据库就必须了解清楚数据库的结构,其实并不困难。本套教程将从最基础的开始来讲述VB6的基础数据库操作。...
  • JiLuoXingRen
  • JiLuoXingRen
  • 2013年07月24日 17:14
  • 9805

VB Socket编程 框架

VB Socket编程(Winsock控件创建TCP/IP客户机/服务器程序) 好东西,所以收藏      Winsock控件建立在TCP、UDP协议的基础上,完成与远程计算机的通信。即使...
  • snlei
  • snlei
  • 2013年09月03日 13:50
  • 7595

VB6多线程探秘

VB6稳定多线程,一直是争论很大的的。 比较稳定的多线程,一般使用 set MT=CreateObject("VbMT.MT") 但其他单元线程之间,是无法访问的,只有在创建者中,才可使用该对象...
  • test2002
  • test2002
  • 2016年09月08日 17:33
  • 1228

【VB6】实现VB6中类的静态方法

原创文章,欢迎支持 在VB的使用过程中,较为高级和较为具有兼容性的编程方式是创建类模块。 比如创建了一个数组创建类,专门用来创建特定类型的数组,它被存在一个“ArrayHelper.cls”文件中...
  • greatbody
  • greatbody
  • 2016年02月13日 19:52
  • 1238

vb中的封装,继承,多态的实现。

面向对象程序设计中的抽象,封装,继承与多态。
  • u013067402
  • u013067402
  • 2014年09月06日 10:41
  • 2232
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Vb 6 中的多态
举报原因:
原因补充:

(最多只允许输入30个字)