Пример 2 Изчисляване обхвата на превозни средства
'Класът "превозно средство - vehicle class" е базов
(или родителски) `клас, който съдържа представянето на общите свойства и методи
на `превозното средство (vehicle).
'MustInherit ключовата дума в декларацията означава,
че този клас не `може да се създаде директно като обект.
Namespace VehicleDemo
Public MustInherit Class Vehicle
'Променливи членове на свойствата (Property holders).
Private mLitriNaSto As
Integer
Private mRezervoar As
Integer
Public Property Rezervoar()
As Integer
Set(ByVal Value As Integer)
mRezervoar = Value
End Set
Get
Rezervoar
= mRezervoar
End Get
End Property
Public Property
LitriNaSto() As Integer
Set(ByVal Value As Integer)
mLitriNaSto = Value
End Set
Get
LitriNaSto = mLitriNaSto
End Get
End Property
'Функцията ComputeRange е маркирана като Overridable
(достъпна за предефиниране прeнаследяване), което означава, че класове, които
наследяват Vehicle class могат да използват (override) изпълнението на тази
функция.
Public Overridable Function ComputeRange() As
Integer
ComputeRange
= mLitriNaSto * mRezervoar
End Function
End Class
End
Namespace
`Това е класът Sailboat
Namespace VehicleDemo
Public Class Sailboat
'Наследява клас Vehicle.
Inherits Vehicle
'необходимо е да предефинираме - override функция
ComputeRange
`за да
направим изчисления за платноходки (sailboats).
'За платноходки - sailboats трябва да утроим изчисления
обхват.
'Извикваме функция ComputeRange на MyBase, което е клас
Vehicle.
Overrides Function
ComputeRange() As Integer
'Това е sailboat така че утрояваме изчисления обхват.
ComputeRange
= MyBase.ComputeRange * 3
End Function
End Class
End
Namespace
`Това е класът Car
Namespace VehicleDemo
'Класът Car просто наследява (inherits)клас Vehicle.
Public Class Car
Inherits Vehicle
End Class
End
Namespace
`Това е класът Boat
Namespace VehicleDemo
Public Class Boat
'Наследява клас Vehicle.
Inherits Vehicle
'Необходимо е да предефинираме (override) функция
ComputeRange.
'За лодки (boats) искаме да преизчислим обхвата.
'Ще извикаме функция ComputeRange с MyBase, което е
всъщност Vehicle клас.
Overrides
Function ComputeRange() As Integer
'Това е лодка - boat така че удвояваме изчисления обхват.
ComputeRange
= MyBase.ComputeRange * 2
End Function
End Class
End
Namespace
Imports
System.ComponentModel
Imports
System.Drawing
Imports
System.Windows.Forms
Imports
VehicleDemoBO.VehicleDemo
Public
Class Form1
Inherits System.Windows.Forms.Form
Public Sub New()
MyBase.New()
'This call is required by the Win Form Designer.
InitializeComponent()
'Add any initialization after the InitializeComponent()
call.
'Set the default vehicleType to Car.
Me.cboVehicleType.SelectedIndex = 0
End Sub
#Region " Windows Form
Designer generated code "
'Required by the Windows Form Designer
Private components As
System.ComponentModel.Container
Private WithEvents
lblComputedRange As System.Windows.Forms.Label
Private WithEvents
chxSailboat As System.Windows.Forms.CheckBox
Private WithEvents
lblVehicleType As System.Windows.Forms.Label
Private WithEvents
cmdComputeRange As System.Windows.Forms.Button
Private WithEvents
cboVehicleType As System.Windows.Forms.ComboBox
Dim WithEvents Form1 As System.Windows.Forms.Form
'NOTE: The following procedure is required by the Windows
Form Designer
'It can be modified using the Windows Form Designer.
'Do not modify it using the code editor.
Private WithEvents
lblLitriNaSto As System.Windows.Forms.Label
Private WithEvents
txtRezervoar As System.Windows.Forms.TextBox
Private WithEvents
lblRezervoar As System.Windows.Forms.Label
Private WithEvents
txtLitriNaSto As System.Windows.Forms.TextBox
<System.Diagnostics.DebuggerStepThrough()>
Private
Sub InitializeComponent()
Me.cmdComputeRange = New
System.Windows.Forms.Button
Me.chxSailboat = New
System.Windows.Forms.CheckBox
Me.lblLitriNaSto = New
System.Windows.Forms.Label
Me.txtRezervoar = New
System.Windows.Forms.TextBox
Me.lblComputedRange = New
System.Windows.Forms.Label
Me.lblRezervoar = New
System.Windows.Forms.Label
Me.lblVehicleType = New
System.Windows.Forms.Label
Me.txtLitriNaSto = New
System.Windows.Forms.TextBox
Me.cboVehicleType = New
System.Windows.Forms.ComboBox
Me.SuspendLayout()
'cmdComputeRange
Me.cmdComputeRange.Location = New System.Drawing.Point(24, 144)
Me.cmdComputeRange.Name = "cmdComputeRange"
Me.cmdComputeRange.Size = New
System.Drawing.Size(96, 23)
Me.cmdComputeRange.TabIndex = 15
Me.cmdComputeRange.Text = "Изчисли обхват"
'chxSailboat
Me.chxSailboat.Enabled
= False
Me.chxSailboat.Location
= New System.Drawing.Point(166, 128)
Me.chxSailboat.Name
= "chxSailboat"
Me.chxSailboat.Size
= New System.Drawing.Size(98, 24)
Me.chxSailboat.TabIndex
= 18
Me.chxSailboat.Text
= "Платноходка"
'lblLitriNaSto
Me.lblLitriNaSto.Location
= New System.Drawing.Point(16, 64)
Me.lblLitriNaSto.Name
= "lblLitriNaSto"
Me.lblLitriNaSto.Size
= New System.Drawing.Size(136, 16)
Me.lblLitriNaSto.TabIndex
= 11
Me.lblLitriNaSto.Text
= "Литри на 100 километра"
'txtRezervoar
Me.txtRezervoar.Location
= New System.Drawing.Point(167, 96)
Me.txtRezervoar.Name
= "txtRezervoar"
Me.txtRezervoar.TabIndex
= 10
Me.txtRezervoar.Text
= "13"
'lblComputedRange
Me.lblComputedRange.Font
= New System.Drawing.Font("Microsoft Sans
Serif", 12.0!, System.Drawing.FontStyle.Bold,
System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.lblComputedRange.ForeColor
= System.Drawing.Color.Red
Me.lblComputedRange.Location
= New System.Drawing.Point(8, 176)
Me.lblComputedRange.Name
= "lblComputedRange"
Me.lblComputedRange.Size
= New System.Drawing.Size(280, 72)
Me.lblComputedRange.TabIndex
= 19
Me.lblComputedRange.Text
= "Кликнете <Изчисли обхват>, за да видите обхвата на вашето
превозно средство"
Me.lblComputedRange.TextAlign
= System.Drawing.ContentAlignment.MiddleCenter
'lblRezervoar
Me.lblRezervoar.Location
= New System.Drawing.Point(16, 96)
Me.lblRezervoar.Name
= "lblRezervoar"
Me.lblRezervoar.Size
= New System.Drawing.Size(136, 16)
Me.lblRezervoar.TabIndex
= 12
Me.lblRezervoar.Text
= "Капацитет на горивото:"
'
'lblVehicleType
'
Me.lblVehicleType.Location
= New System.Drawing.Point(16, 24)
Me.lblVehicleType.Name
= "lblVehicleType"
Me.lblVehicleType.Size
= New System.Drawing.Size(136, 16)
Me.lblVehicleType.TabIndex
= 16
Me.lblVehicleType.Text
= "Вид превозно средство"
'
'txtLitriNaSto
'
Me.txtLitriNaSto.Location
= New System.Drawing.Point(167, 64)
Me.txtLitriNaSto.Name
= "txtLitriNaSto"
Me.txtLitriNaSto.TabIndex
= 9
Me.txtLitriNaSto.Text
= "24"
'
'cboVehicleType
'
Me.cboVehicleType.DropDownStyle=
_
System.Windows.Forms.ComboBoxStyle.DropDownList
Me.cboVehicleType.DropDownWidth
= 104
Me.cboVehicleType.Items.AddRange(New Object()
{"Car", "Boat"})
Me.cboVehicleType.Location
= New System.Drawing.Point(167, 24)
Me.cboVehicleType.Name
= "cboVehicleType"
Me.cboVehicleType.Size
= New System.Drawing.Size(104, 21)
Me.cboVehicleType.TabIndex
= 8
'
'Form1
'
Me.AutoScaleBaseSize
= New System.Drawing.Size(5, 13)
Me.ClientSize
= New System.Drawing.Size(290, 255)
Me.Controls.Add(Me.lblComputedRange)
Me.Controls.Add(Me.chxSailboat)
Me.Controls.Add(Me.lblVehicleType)
Me.Controls.Add(Me.cmdComputeRange)
Me.Controls.Add(Me.lblRezervoar)
Me.Controls.Add(Me.lblLitriNaSto)
Me.Controls.Add(Me.txtRezervoar)
Me.Controls.Add(Me.txtLitriNaSto)
Me.Controls.Add(Me.cboVehicleType)
Me.Name
= "Form1"
Me.Text
= "PrevozDemo"
Me.ResumeLayout(False)
End Sub
'Form overrides dispose to clean up the component list.
Protected Overloads Overrides Sub
Dispose(ByVal disposing As Boolean)
If disposing Then
If Not (components Is Nothing) Then
components.Dispose()
End If
End If
MyBase.Dispose(disposing)
End Sub
#End Region
Private Sub
cboVehicleType_SelectedIndexChanged(ByVal
sender As Object,
ByVal e As
System.EventArgs) Handles cboVehicleType.SelectedIndexChanged
'Enable/Disable Разрешава/Забранява полето за отметка
Sailboat в зависимост от типа превозно средство - VehicleType.
If Me.cboVehicleType.Text
= "Boat" Then
Me.chxSailboat.Enabled = True
Else
Me.chxSailboat.Enabled = False
End If
End Sub
Private Sub
cmdComputeRange_Click(ByVal sender As Object, ByVal e As
System.EventArgs) Handles cmdComputeRange.Click
Dim Vehicle As Object
Dim Range As Integer
'Създава
обектния тип базиран на избраното превозно средство.
'Имаме късно свързване - late binding на обект objVehicle,
така че можем да го създадем по-късно като кола - car или лодка - boat.
If Me.cboVehicleType.Text
= "Boat" Then
If Me.chxSailboat.Checked Then
' Това е платноходка - sailboat.
Vehicle =
New Sailboat
Else
Vehicle =
New Boat
End If
Else
Vehicle = New Car
End If
'Определя свойства Rezervoar и LitriNaSto.
'Повикванията са същите независимо от типа превозно
средство
Vehicle.Rezervoar
= CInt(Me.txtRezervoar.Text)
Vehicle.LitriNaSto = CInt(Me.txtLitriNaSto.Text)
'Викаме функция ComputeRange. Отбележете, че ще осъществим
`различни
изпълнения на този метод в зависимост
` от типа
превозно средство.
Range =
Vehicle.ComputeRange()
'Извеждане на изчисления обхват.
Me.lblComputedRange.Text = "Обхватът на
превозното средство е: " & Range.ToString()
End Sub
End Class
Фигура 63Форма
на пример 2