Class Room
Private mother As MyRoom
Public Sub New(ByVal mo As MyRoom)
mother = mo
End Sub
Public Function GetID() As String
GetID = mother.yourID()
End Function
End Class
Class MyRoom
Inherits Room
Public Sub New()
MyBase.New(Me)
End Sub
Public Function yourID() As String
yourID = "VIP888"
End Function
End Class
''''----------------------------------------------------
Public Class Form1
Inherits System.WinForms.Form
Public Sub New()
MyBase.New()
Form1 = Me
''''This call is required by the Win Form Designer.
InitializeComponent()
''''TODO: Add any initialization after the InitializeComponent() call
End Sub
''''Form overrides dispose to clean up the component list.
Public Overrides Sub Dispose()
MyBase.Dispose()
components.Dispose()
End Sub
#Region " Windows Form Designer generated code "
......
#End Region
Protected Sub Form1_Click(ByVal sender As Object, ByVal e As System.EventArgs)
Dim r As New MyRoom()
MessageBox.Show(r.GetID())
End Sub
End Class
此程序输出﹕
VIP888
MyRoom()建构者New()将Me值给 Room的mother参考。于是mother参考到母对象r。Room类别是MyRoom之父类别﹐但Room之对象却是MyRoom之子对象。
如果将上述Room的指令:
Public Function GetID() As String
GetID = mother.yourID()
End Function
更改为:
Public Function GetID() As String
GetID = Me.yourID() ''''Error!!
End Function
就错了。因为Room类别里没有定义yourID()程序。事实上,VB的继承机制里已经有母对象的参考值了,VB的Overridable机制就是基于它而呼叫到子类别(母对象)的程序的。例如上述程序相当于:
''''ex07.bas
Imports System.ComponentModel
Imports System.Drawing
Imports System.WinForms
''''----------------------------------------------------
Class Room
Public Function GetID() As String
GetID = Me.yourID()
End Function
Public Overridable Function yourID() As String
End Function
End Class
Class MyRoom
Inherits Room
Public Sub New()
MyBase.New()
End Sub
Public Overrides Function yourID() As String
yourID = "VIP888"
End Function
End Class
''''----------------------------------------------------
Public Class Form1
Inherits System.WinForms.Form
Public Sub New()
MyBase.New()
Form1 = Me
''''This call is required by the Win Form Designer.
InitializeComponent()
''''TODO: Add any initialization after the InitializeComponent() call
End Sub
''''Form overrides dispose to clean up the component list.
Public Overrides Sub Dispose()
MyBase.Dispose()
components.Dispose()
End Sub
#Region " Windows Form Designer generated code "
.......
#End Region
Protected Sub Form1_Click(ByVal sender As Object, ByVal e As System.EventArgs)
Dim r As New MyRoom()
MessageBox.Show(r.GetID())
End Sub
End Class
此程序输出﹕
VIP888
上述ex07.bas比ex06.bas好的地方是:
ex06.bas程序的Room类别里面用到MyRoom的名称。而ex07.bas程序的Room类别里面并没用到MyRoom的名称,因此Room类别可以先设计,MyRoom类别能后来才设计,这是继承机制的目的之一。不过,如果您一定不想用继承与Overridable概念的话,可使用VB的Interface机制来改善ex06.bas程序,如下:
''''ex08.bas
Imports System.ComponentModel
Imports System.Drawing
Imports System.WinForms
''''----------------------------------------------------
Interface IMyRoom
Function yourID() As String
End Interface
Class Room
Private mother As IMyRoom
Public Sub New(ByVal mo As IMyRoom)
mother = mo
End Sub
Public Function GetID() As String
GetID = "RoomID: " mother.yourID()
End Function
End Class
Class MyRoom
Implements IMyRoom
Private base As Room
Public Sub New()
base = New Room(Me)
End Sub
Public Function yourID() As String Implements IMyRoom.yourID
yourID = "VIP888"
End Function
Public Function GetID() As String
GetID = base.GetID()
End Function
End Class
''''----------------------------------------------------
Public Class Form1
Inherits System.WinForms.Form
Public Sub New()
MyBase.New()
Form1 = Me
''''This call is required by the Win Form Designer.
InitializeComponent()
''''TODO: Add any initialization after the InitializeComponent() call
End Sub
''''Form overrides dispose to clean up the component list.
Public Overrides Sub Dispose()
MyBase.Dispose()
components.Dispose()
文章整理:西部数码--专业提供域名注册、虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!




