|
m.WinForms ''''---------------------------------------------------- Class Room Protected rSize As Double Shared motherObject As Room Shared Function GetMother() As Room GetMother = motherObject End Function Public Overridable Sub Create() motherObject = Me End Sub Public Function GetSize() As Double GetSize = rSize End Function End Class
Class Desk Protected dSize As Double Public Sub Create() dSize = Room.GetMother().GetSize() * 0.18 End Sub Public Function GetSize() As Double GetSize = dSize End Function End Class ''''---------------------------------------------------- Class MyRoom Inherits Room Private rd As New Desk() Public Sub New() Me.Create() End Sub Public Overrides Sub Create() MyBase.Create() rSize = 100 rd.Create() End Sub Public Sub Show() 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
像指令── dSize = Room.GetMother().GetSize() * 0.18﹐已挪到新设的Create()程序里。待母对象完全建好了﹐才会呼叫这Create()程序﹐GetSize() 就能取得正确值了。MyRoom的New()呼叫Create()程序时﹐母子对象皆已建造完成了。Create()内部依人们的习惯来设定对象之值,例如建立母子对象之关系。
如此就不会出问题了。 New()与Create()分离之后,MyRoom类别里的指令:
Class MyRoom Inherits Room Private rd As New Desk() Public Sub New() Me.Create() End Sub ........
也能写为: Class MyRoom Inherits Room Private rd As Desk Public Sub New() rd = New Desk() Me.Create() End Sub ........
只要确保Desk类别的指令── dSize = Room.GetMother().GetSize() * 0.18
是在MyRoom类别的指令── rSize = 100
之后执行即可了。 上述的子对象是透过Shared 程序来取得母对象的参考值﹐然后才跟母对象沟通。如果不透过Shared程序,也可以采取下述方法:
''''ex04.bas Imports System.ComponentModel Imports System.Drawing Imports System.WinForms ''''---------------------------------------------------- Class Room Protected rSize As Double Public Overridable Sub Create() End Sub Public Function GetSize() As Double GetSize = rSize End Function End Class
Class Desk Protected dSize As Double Protected myMother As Room Public Sub Create(ByVal mo As Room) myMother = mo dSize = myMother.GetSize() * 0.18 End Sub Public Function GetSize() As Double GetSize = dSize End Function End Class ''''---------------------------------------------------- Class MyRoom Inherits Room Private rd As Desk Public Sub New() rd = New Desk() Me.Create() End Sub Public Overrides Sub Create() rSize = 100 rd.Create(Me) End Sub Public Sub Show() 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
Desk之对象含个参考 myMother ﹐指向其母对象。这项关系是在母子对象皆建好时﹐才由Create()程序所建立的。于是﹐建立出母子对象之关系﹕
综上所述,当MyRoom类别使用如下指令── Private rd As New Desk()
时,才必须把New()与Create()分离。如果使用如下指令──
Private rd As Desk Public Sub New() rd = New Desk() ..... End Sub 就不必分离了,原因是:New()与Create()的执行顺序是一致的,例如两者可合并如下的VB程序:
''''ex05.bas Imports System.ComponentModel Imports System.Drawing Imports System.WinForms ''''---------------------------------------------------- Class Room Protected rSize As Double Public Function GetSize() As Double GetSize = rSize End Function End Class
Class Desk Protected dSize As Double Protected myMother As Room Public Sub New(ByVal mo As Room) myMother = mo dSize = myMother.GetSize() * 0.18 End Sub Public Function GetSize() As Double GetSize = dSize End Function End Class ''''---------------------------------------------------- Class MyRoom Inherits Room Private rd As Desk Public Sub New() rSize = 100 rd = New Desk(Me) End Sub Public Sub Show() & 上一页 [1] [2] [3] [4] 下一页 没有相关教程
|