回复人: TechnoFantasy(www.applevb.com) ( ) 信誉:100 2002-3-4 19:40:52 得分:0
VB最为人垢病的是它的面向对象特性。实际上VB是一种基于对象的开发工具。在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中是如何实现面向对象的特性:继承、虚拟以及多态的。只是同
诸如Java、C++、Object Pascal不同,VB将很多实现的细节隐藏了起来。
Top
回复人: Bardo(巴顿) ( ) 信誉:76 2002-3-4 20:20:39 得分:0
其实很多人在DLL中用窗体,事实上是不会用这些方法!
比如要在窗体中实现函数或事件,则不必将窗体加在DLL中
只要用继承即可!
比如在类ClsTest中定义一个虚函数Change(),即不需要一行代码的函数
然后
窗体中加上
Implements ClsTest
(这样即可看到窗体中有了ClsTest_Change())
再有下列代码:
Dim CTest as New ClsTest
Dim Form as form1
Set Form = New form1
Set CTest = Form
这样即让窗体直正继承了类ClsTest
在DLL中只要调用ClsTest这个类中的Change()
而体中ClsTest_Change()的代码即会执行!
Top
回复人: Bardo(巴顿) ( ) 信誉:76 2002-3-4 20:22:15 得分:0
因为虚函数,所以通过继承实现重载是绝对可以的,因而是可以多态的!
但这又不是与VC中的方式等同的!
Top
回复人: Bardo(巴顿) ( ) 信誉:76 2002-3-4 20:39:15 得分:0
同样以前人们讨论窗体继承,实际上窗体是可以继承类的
但控则是通过容器类实现的!
所以窗体界面要实际模板化,则要使用UserControl类!!
http://www.csdn.net/expert/topic/554/554685.xml?temp=.8869898
VB最为人垢病的是它的面向对象特性。实际上VB是一种基于对象的开发工具。在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中是如何实现面向对象的特性:继承、虚拟以及多态的。只是同
诸如Java、C++、Object Pascal不同,VB将很多实现的细节隐藏了起来。
Top
回复人: Bardo(巴顿) ( ) 信誉:76 2002-3-4 20:20:39 得分:0
其实很多人在DLL中用窗体,事实上是不会用这些方法!
比如要在窗体中实现函数或事件,则不必将窗体加在DLL中
只要用继承即可!
比如在类ClsTest中定义一个虚函数Change(),即不需要一行代码的函数
然后
窗体中加上
Implements ClsTest
(这样即可看到窗体中有了ClsTest_Change())
再有下列代码:
Dim CTest as New ClsTest
Dim Form as form1
Set Form = New form1
Set CTest = Form
这样即让窗体直正继承了类ClsTest
在DLL中只要调用ClsTest这个类中的Change()
而体中ClsTest_Change()的代码即会执行!
Top
回复人: Bardo(巴顿) ( ) 信誉:76 2002-3-4 20:22:15 得分:0
因为虚函数,所以通过继承实现重载是绝对可以的,因而是可以多态的!
但这又不是与VC中的方式等同的!
Top
回复人: Bardo(巴顿) ( ) 信誉:76 2002-3-4 20:39:15 得分:0
同样以前人们讨论窗体继承,实际上窗体是可以继承类的
但控则是通过容器类实现的!
所以窗体界面要实际模板化,则要使用UserControl类!!
http://www.csdn.net/expert/topic/554/554685.xml?temp=.8869898
解决方案 »
- 关于数据库添加记录问题
- 晕哦````怎么办?如何实现16串口以上的
- 求助vb 判断问题 (fvflove姑娘怎么不见了? 生病了还是?)
- VB中调用文件的问题
- VB怎么动态设定水晶报表的数据源
- 我的VB6+SP5 这几天突然不能用了,是不是Studio.Net的原因?
- python 嵌入vb的问题,有vb原码,运行失败,望高人看看,不胜感激
- vb中如何使用excel
- 十万火急的人请求帮助
- 公开一个用ASP.VBScript写的图形聊天室"水泊梁山"的源代码
- 请问边位大哥有关于vb程序访问sql server的电子书?
- 各位高手,我新找了份工作,需要用VB,这对我来说是新鲜的。请告诉我vb如何入门!拜托!
下面的示例说明如何使用 Implements 语句来编写多个类都可以使用的一系列声明。通过 Implements 语句共享这些声明,所有的类都不必再自己进行声明。假设有两个窗体。其中 Selector 窗体有两个按钮,Customer Data 和 Supplier Data。若要输入客户或供应商的名称及地址信息,用户就单击 Selector 窗体的 Customer Date 按钮或 Supplier Date 按钮,然后使用 Data Entry 窗体来输入名称和地址。Data Entry 窗体有两个文本字段,Name 和 Address。下面的共享声明的代码位于称为 PersonalData 的类中:Public Name As String
Public Address As String有关处理客户数据的代码位于 Customer 类模块:Implements PersonalData
Private Property Get PersonalData_Address() As String
PersonalData_Address = "CustomerAddress"
End PropertyPrivate Property Let PersonalData_Address(ByVal RHS As String)
'
End PropertyPrivate Property Let PersonalData_Name(ByVal RHS As String)
'
End PropertyPrivate Property Get PersonalData_Name() As String
PersonalData_Name = "CustomerName"
End Property有关处理供应商数据的代码位于 Supplier 类模块:Implements PersonalDataPrivate Property Get PersonalData_Address() As String
PersonalData_Address = "SupplierAddress"
End PropertyPrivate Property Let PersonalData_Address(ByVal RHS As String)
'
End PropertyPrivate Property Let PersonalData_Name(ByVal RHS As String)
'
End PropertyPrivate Property Get PersonalData_Name() As String
PersonalData_Name = "SupplierName"
End Property下面的代码负责处理 Selector 窗体:Private cust As New Customer
Private sup As New SupplierPrivate Sub Command1_Click()
Dim frm2 As New Form2
Set frm2.PD = cust
frm2.Show 1
End SubPrivate Sub Command2_Click()
Dim frm2 As New Form2
Set frm2.PD = sup
frm2.Show 1
End Sub下面的代码负责处理 Data Entry 窗体:Private m_pd As PersonalData
Private Sub Form_Load()
With m_pd
Text1 = .Name
Text2 = .Address
End With
End Sub
Public Property Set PD(Data As PersonalData)
Set m_pd = Data
End Property
2、vb中通过委派或包容获得可重用性,但不支持直接的继承
要真正的继承,就到VB.Net里去吧
如果这样
以后我即可以出版《VB乱谈及其它》了
Inherits System.Windows.Forms.Form别说这不是VB
我在think in C++上看到的。
VB支持组合。