VB.Net/Class/Abstract Class
Версия от 16:40, 26 мая 2010; (обсуждение)
Abstract (MustInherit) Class
Imports System
Public Class MainClass
Shared Sub Main()
Dim winArray(3) As Window
winArray(0) = New ListBox(1, 2, "First List Box")
winArray(1) = New ListBox(3, 4, "Second List Box")
winArray(2) = New Button(5, 6)
Dim i As Integer
For i = 0 To 2
winArray(i).DrawWindow( )
Next i
End Sub
End Class
MustInherit Public Class Window
Public Sub New(top As Integer, left As Integer)
Me.top = top
Me.left = left
End Sub "New
Public MustOverride Sub DrawWindow( )
Protected top As Integer
Protected left As Integer
End Class "Window
Public Class ListBox
Inherits Window
Public Sub New(top As Integer, left As Integer, contents As String)
MyBase.New(top, left) " call base constructor
listBoxContents = contents
End Sub "New
Public Overrides Sub DrawWindow( )
Console.WriteLine("Writing string to the listbox: {0}", listBoxContents)
End Sub "DrawWindow
Private listBoxContents As String
End Class
Public Class Button
Inherits Window
Public Sub New(top As Integer, left As Integer)
MyBase.New(top, left)
End Sub
Public Overrides Sub DrawWindow( )
Console.WriteLine("Drawing a button at {0}, {1}" + ControlChars.Lf, top, left)
End Sub
End Class
Define Abstract Class and Reference Class by it
Imports System
Public Class MainClass
Shared Sub Main()
Dim tom As New Employee("Tom", 50000, "111-11-1234")
Dim sally As New Employee("Sally", 150000, "111-11-2234")
Dim ourEmployees(1) As PayableEntity
ourEmployees(0) = tom
ourEmployees(1) = sally
Dim anEmployee As PayableEntity
For Each anEmployee In ourEmployees
Console.WriteLine(anEmployee.TheName & " has tax id " & anEmployee.TaxID )
Next
End Sub
End Class
Public MustInherit Class PayableEntity
Private m_Name As String
Public Sub New(ByVal itsName As String)
m_Name = itsName
End Sub
ReadOnly Property TheName() As String
Get
Return m_Name
End Get
End Property
Public MustOverride Property TaxID() As String
End Class
Public Class Employee
Inherits PayableEntity
Private m_Salary As Decimal
Private m_TaxID As String
Private Const LIMIT As Decimal = 0.1D
Public Sub New(ByVal theName As String, ByVal curSalary As Decimal, ByVal TaxID As String)
MyBase.New(theName)
m_Salary = curSalary
m_TaxID = TaxID
End Sub
Public Overrides Property TaxID() As String
Get
Return m_TaxID
End Get
Set(ByVal Value As String)
m_TaxID = Value
End Set
End Property
ReadOnly Property Salary() As Decimal
Get
Return MyClass.m_Salary
End Get
End Property
Public Overridable Overloads Sub RaiseSalary(ByVal Percent As Decimal)
If Percent > LIMIT Then
"not allowed
Console.WriteLine("Percent > LIMIT")
Else
m_Salary = (1D + Percent) * m_Salary
End If
End Sub
Public Overridable Overloads Sub RaiseSalary(ByVal Percent As _
Decimal, ByVal Password As String)
If Password = "special" Then
m_Salary = (1D + Percent) * m_Salary
End If
End Sub
End Class