|
nbsp; MessageBox.Show("Room Size: " + str(rSize)) MessageBox.Show("Desk Size: " + str(rd.GetSize())) End Sub 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() r.Show() End Sub End Class
此程序输出: Room Size: 100 Desk Size: 18
3. 特类别继承与母子对象
您已很熟悉父子类别关系了﹐这继承关系的另一面是母子对象关系。例如﹐
''''ex06.bas Imports System.ComponentModel Imports System.Drawing Imports System.WinForms ''''---------------------------------------------------- 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() 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() & 上一页 [1] [2] [3] [4] 下一页 没有相关教程
|