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 crag As New Teacher("Crag", 38, 45000) crag.modifyName("Crag Clinton") MessageBox.Show( "AGE: " + str(crag.age) + ", SALARY: " + str(crag.salary)) End Sub End Class
因为name是Person类别的私有资料,在子类别Teacher的modifyName()里不能使用此资料名称,所以错了。如果将Person类别定义为﹕
'ex03.bas Imports System.ComponentModel Imports System.Drawing Imports System.WinForms '--------------------------------------------------------- Class Person Protected name As String Public age As Integer
Public Sub New(ByVal na As String, ByVal a As Integer) name = na age = a End Sub Public Function GetName() As String GetName = name End Function End Class
Class Teacher Inherits Person
Public salary As Single Public Sub New(ByVal na As String, ByVal a As Integer, ByVal sa As Single) MyBase.New(na, a) salary = sa End Sub Public Sub modifyName(ByVal na As String) name = na 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 crag As New Teacher("Crag", 38, 45000) crag.modifyName("Crag Clinton") MessageBox.Show( "AGE: " + str(crag.age) + ", NAME: " + crag.GetName()) End Sub End Class
此程序输出: AGE: 42, NAME: Crag Clinton
此时﹐name为家族公用之资料﹐凡是Person之子孙类别皆可取用之。但家族外之程序(如 Form1_Click()程序)仍不得直接使用之。如果上述定义改为﹕
Class Person Protected name As String Private salary As Decimal Public age As Integer
Public Sub New(ByVal na As String, ByVal a As Integer) name = na age = a End Sub End Class
(编辑:aniston)
|