VB6中的类,是我一直感到物理看花的问题。之所以写这个题目,也是因为看了好多文章,用了好多类,还是不够清楚。整理一下写下来,也是让自己理清思路,同时给初学者一个容易看懂的关于类的说明。
VB6的类,是VB6面向对象编程的重要特征。从这个角度来讲,或许能帮助理解。
一,面向对象编程
面向对象程序设计(Object Oriented Programming)作为一种新方法,其本质是以建立模型体现出来的抽象思维过程和面向对象的方法。
面向对象程序设计方法是尽可能模拟人类的思维方式,使得软件的开发方法与过程尽可能接近人类认识世界、解决现实问题的方法和过程,也即使得描述问题的问题空间与问题的解决方案空间在结构上尽可能一致,把客观世界中的实体抽象为问题域中的对象。
面向对象程序设计以对象为核心,该方法认为程序由一系列对象组成。类是对现实世界的抽象,包括表示静态属性的数据和对数据的操作,对象是类的实例化。对象间通过消息传递相互通信,来模拟现实世界中不同实体间的联系。在面向对象的程序设计中,对象是组成程序的基本模块。
面向对象程序设计有三个特点:封装性、继承性、多态性。
二,VB类的基本特点
VB6是一个早期的,在面向过程向面向对象编程过渡时的编程语言,在面向对象和面向过程之间有很好的平衡,支持面向对象的一些基本特性。
事实上,面向对象并没有解决什么算法的问题,只是解决了一点编程时程序代码的组织的思路和方法,在编写几百行代码的小型程序时,用不上面向对象(这也是为什么编程语言刚开始都是面向过程的原因,面向对象还是更复杂一些)。
但是如果我们想模拟人类的思维来解决问题(什么?你没这么想?),那么VB6提供了基本的面向对象的支持,其体现形式,就是类。VB的类,具有上述的三个特点:封装性、继承性、多态性。
看下例:
首先建立一个新工程,然后添加一个新的类模块(Class Module),类名称设定为BaseClass。
然后在BaseClass中加入以下代码:
Public Sub BaseSub() '虚拟特性,BaseSub在子类中实现
End Sub
然后添加两个类模块,类名称分别设定为ImpClass以及ImpClass2,然后在类的代码窗口中写入:
Implements BaseClass '继承特性
上面这行代码说明类ImpClass以及ImpClass2实现类BaseClass。
在ImpClass窗口中加入以下代码:
Private Sub BaseClass_BaseSub() '实现基类中的BaseSub方法
MsgBox "Hello. This is Imp. inherited from BaseClass"
End Sub
在ImpClass2中加入以下代码:
Private Sub BaseClass_BaseSub()
MsgBox "Hello. This is Imp2. inherited from BaseClass"
End Sub
完成了上面的类代码后,打开Form1,在上面添加一个CommandButton,在按钮的Click事件中
写入以下代码:
Dim xImp As New ImpClass
Dim xIMp2 As New ImpClass2
Dim xBase As BaseClass
Set xBase = xImp '多态特性
xBase.BaseSub
Set xBase = xIMp2
xBase.BaseSub
Set xBase = Nothing
Set xImp = Nothing
Set xIMp2 = Nothing
运行程序,点击CommandButton,程序会先后弹出消息框,显示在ImpClass以及ImpClass2中
设定的消息。
从上面的代码中可以看到VB中是如何实现面向对象的特性:继承、虚拟以及多态的,而类,本身就是对对象进行封装(抽象和组合)的结果。
这里,也可以看到类和标准模块最大的区别:标准模块的数据只有一个副本,因此当程序的一部分更改模块中的公共变量时,如果程序的其他任何部分随后读取该变量,都会获取同样的值。与之相反,类是可以实例化为对象的,每个实例化对象的对象数据则单独存在。
类与模块的其它区别,比如继承、接口、数据等,待后续。