VB.Net/Class/Inheritance
Версия от 16:40, 26 мая 2010; (обсуждение)
Class Inheritance Demo
Imports System
Imports System.Collections
Imports System.ruponentModel
Imports System.Windows.Forms
Imports System.Data
Imports System.Configuration
Imports System.Resources
Imports System.Drawing
Imports System.Drawing.Drawing2D
Imports System.IO
Imports System.Drawing.Printing
Module Module1
Sub Main()
Using objCar As New SportsCar
"Set the horsepower and weight(kg)
objCar.HorsePower = 240
objCar.Weight = 1085
"Display the details of the car
DisplayCarDetails(objCar)
DisplaySportsCarDetails(objCar)
End Using
"Wait for input from the user
Console.ReadLine()
End Sub
"DisplayCarDetails - procedure that displays a car"s details
Sub DisplayCarDetails(ByVal theCar As Car)
"Display the details of the car
Console.WriteLine("Color: " & theCar.Color)
Console.WriteLine("Number of doors: " & theCar.NumberOfDoors)
Console.WriteLine("Current speed: " & theCar.Speed)
Console.WriteLine("Acceleration rate: " & _
theCar.CalculateAccelerationRate)
End Sub
"DisplaySportsCarDetails - procedure that displays a sports car"s details
Sub DisplaySportsCarDetails(ByVal theCar As SportsCar)
"Display the details of the sports car
Console.WriteLine()
Console.WriteLine("Sports Car Horsepower: " & theCar.HorsePower)
Console.WriteLine("Sports Car Weight: " & theCar.Weight)
Console.WriteLine("Power to Weight Ratio: " & theCar.GetPowerToWeightRatio)
End Sub
End Module
Public Class Car
Implements IDisposable
Public Color As String
Public HorsePower As Integer
Private _speed As Integer
Private _numberOfDoors As Integer
Public ReadOnly Property Speed() As Integer
Get
Return _speed
End Get
End Property
Public Sub Accelerate(ByVal accelerateBy As Integer)
_speed += accelerateBy
End Sub
Public Property NumberOfDoors() As Integer
Get
Return _numberOfDoors
End Get
Set(ByVal value As Integer)
If value >= 2 And value <= 5 Then
_numberOfDoors = value
End If
End Set
End Property
Public Function IsMoving() As Boolean
If Speed = 0 Then
Return False
Else
Return True
End If
End Function
Public Sub New()
Color = "White"
_speed = 0
_numberOfDoors = 5
End Sub
Public Overridable Function CalculateAccelerationRate() As Double
Return 4.2
End Function
Private disposed As Boolean = False
" IDisposable
Private Overloads Sub Dispose(ByVal disposing As Boolean)
If Not Me.disposed Then
If disposing Then
" TODO: put code to dispose managed resources
End If
" TODO: put code to free unmanaged resources here
End If
Me.disposed = True
End Sub
#Region " IDisposable Support "
" This code added by Visual Basic to correctly implement the disposable pattern.
Public Overloads Sub Dispose() Implements IDisposable.Dispose
" Do not change this code. Put cleanup code in Dispose(ByVal disposing As Boolean) above.
Dispose(True)
GC.SuppressFinalize(Me)
End Sub
Protected Overrides Sub Finalize()
" Do not change this code. Put cleanup code in Dispose(ByVal disposing As Boolean) above.
Dispose(False)
MyBase.Finalize()
End Sub
#End Region
End Class
Public Class SportsCar
Inherits Car
Public Weight As Integer
Public Function GetPowerToWeightRatio() As Double
Return CType(HorsePower, Double) / CType(Weight, Double)
End Function
Public Sub New()
"Change the default values
Color = "Green"
NumberOfDoors = 2
End Sub
Public Overrides Function CalculateAccelerationRate() As Double
"You"ll assume the same 4.2 value, but you"ll multiply it
"by the power/weight ratio
Return 4.2 * GetPowerToWeightRatio()
End Function
End Class
Construct Class by Class Combination
Imports System
Public Class MainClass
Shared Sub Main(ByVal args As String())
Dim circle As Circle
circle = New Circle(37, 43, 2.5) " instantiate Circle
Console.WriteLine( "X coordinate is " & circle.X & vbCrLf & _
"Y coordinate is " & circle.Y & vbCrLf & "Radius is " & _
circle.Radius )
circle.X = 2
circle.Y = 2
circle.Radius = 4.25
Console.WriteLine("The new location and radius of circle are " & _
vbCrLf & circle.ToString() )
Console.WriteLine( "Diameter is " & _
String.Format("{0:F}", circle.Diameter()) )
Console.WriteLine("Circumference is " & _
String.Format("{0:F}", circle.Circumference()) )
Console.WriteLine( "Area is " & String.Format("{0:F}", circle.Area()) )
End Sub
End Class
" Circle class that inherits from class Point.
Public Class Circle
Inherits Point " Circle Inherits from class Point
Private mRadius As Double " Circle"s radius
" default constructor
Public Sub New()
" implicit call to Point constructor occurs here
Radius = 0
End Sub " New
" constructor
Public Sub New(ByVal xValue As Integer, _
ByVal yValue As Integer, ByVal radiusValue As Double)
" implicit call to Point constructor occurs here
X = xValue
Y = yValue
Radius = radiusValue
End Sub " New
" property Radius
Public Property Radius() As Double
Get
Return mRadius
End Get
Set(ByVal radiusValue As Double)
If radiusValue > 0 Then
mRadius = radiusValue
End If
End Set
End Property " Radius
" calculate Circle diameter
Public Function Diameter() As Double
Return mRadius * 2
End Function " Diameter
" calculate Circle circumference
Public Function Circumference() As Double
Return Math.PI * Diameter()
End Function " Circumference
" calculate Circle area
Public Function Area() As Double
Return Math.PI * mRadius ^ 2
End Function " Area
" return String representation of Circle
Public Overrides Function ToString() As String
Return "Center = " & "[" & X & ", " & Y & "]" & _
"; Radius = " & mRadius
End Function " ToString
End Class " Circle
" Point class represents an x-y coordinate pair.
Public Class Point
" implicitly Inherits Object
" point coordinate
Private mX, mY As Integer
" default constructor
Public Sub New()
" implicit call to Object constructor occurs here
X = 0
Y = 0
End Sub " New
" constructor
Public Sub New(ByVal xValue As Integer, _
ByVal yValue As Integer)
" implicit call to Object constructor occurs here
X = xValue
Y = yValue
End Sub " New
" property X
Public Property X() As Integer
Get
Return mX
End Get
Set(ByVal value As Integer)
mX = value
End Set
End Property " X
" property Y
Public Property Y() As Integer
Get
Return mY
End Get
Set(ByVal value As Integer)
mY = value
End Set
End Property " Y
" return String representation of Point
Public Overrides Function ToString() As String
Return "[" & mX & ", " & mY & "]"
End Function " ToString
End Class " Point
Four Level Hierachy
Imports System
Public Class MainClass
Shared Sub Main(ByVal args As String())
Dim point As New Point(7, 11)
Dim circle As New Circle(22, 8, 3.5)
Dim cylinder As New Cylinder(10, 10, 3.3, 10)
Dim arrayOfShapes As IShape() = New IShape(2) {}
arrayOfShapes(0) = point
arrayOfShapes(1) = circle
arrayOfShapes(2) = cylinder
Console.WriteLine( point.Name & ": " & _
point.ToString() & vbCrLf & circle.Name & ": " & _
circle.ToString() & vbCrLf & cylinder.Name & _
": " & cylinder.ToString() )
Dim shape As IShape
For Each shape In arrayOfShapes
Console.WriteLine(shape.Name & ": " & "Area = " & _
String.Format("{0:F}", shape.Area()) & _
"Volume = " & String.Format("{0:F}", shape.Volume()) )
Next
End Sub
End Class
Public Interface IShape
Function Area() As Double
Function Volume() As Double
ReadOnly Property Name() As String
End Interface
Public Class Point
Implements IShape
Private mX, mY As Integer
Public Sub New()
X = 0
Y = 0
End Sub
Public Sub New(ByVal xValue As Integer, _
ByVal yValue As Integer)
X = xValue
Y = yValue
End Sub
Public Property X() As Integer
Get
Return mX
End Get
Set(ByVal xValue As Integer)
mX = xValue
End Set
End Property
Public Property Y() As Integer
Get
Return mY
End Get
Set(ByVal yValue As Integer)
mY = yValue
End Set
End Property
Public Overrides Function ToString() As String
Return "[" & mX & ", " & mY & "]"
End Function " ToString
Public Overridable Function Area() As Double _
Implements IShape.Area
Return 0
End Function
Public Overridable Function Volume() As Double _
Implements IShape.Volume
Return 0
End Function
Public Overridable ReadOnly Property Name() As String _
Implements IShape.Name
Get
Return "Point"
End Get
End Property
End Class
Public Class Circle
Inherits Point
Private mRadius As Double
Public Sub New()
Radius = 0
End Sub
Public Sub New(ByVal xValue As Integer, _
ByVal yValue As Integer, ByVal radiusValue As Double)
MyBase.New(xValue, yValue)
Radius = radiusValue
End Sub
Public Property Radius() As Double
Get
Return mRadius
End Get
Set(ByVal radiusValue As Double)
If radiusValue >= 0 Then
mRadius = radiusValue
End If
End Set
End Property
Public Function Diameter() As Double
Return mRadius * 2
End Function
Public Function Circumference() As Double
Return Math.PI * Diameter()
End Function
Public Overrides Function Area() As Double
Return Math.PI * mRadius ^ 2
End Function
Public Overrides ReadOnly Property Name() As String
Get
Return "Circle"
End Get
End Property
Public Overrides Function ToString() As String
Return "Center = " & MyBase.ToString() & _
"; Radius = " & mRadius
End Function " ToString
End Class
Public Class Cylinder
Inherits Circle
Private mHeight As Double
Public Sub New()
Height = 0
End Sub
Public Sub New(ByVal xValue As Integer, _
ByVal yValue As Integer, ByVal radiusValue As Double, _
ByVal heightValue As Double)
MyBase.New(xValue, yValue, radiusValue)
Height = heightValue
End Sub
Public Property Height() As Double
Get
Return mHeight
End Get
Set(ByVal heightValue As Double)
If heightValue >= 0 Then
mHeight = heightValue
End If
End Set
End Property
Public Overrides Function Area() As Double
Return 2 * MyBase.Area + MyBase.Circumference * mHeight
End Function
Public Overrides Function Volume() As Double
Return MyBase.Area * mHeight
End Function
Public Overrides Function ToString() As String
Return MyBase.ToString() & "; Height = " & mHeight
End Function " ToString
Public Overrides ReadOnly Property Name() As String
Get
Return "Cylinder"
End Get
End Property
End Class