VB.Net/Class/Inheritance

Материал из VB Эксперт
Перейти к: навигация, поиск

Class Inheritance Demo

<source lang="vbnet"> 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
  1. 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
  1. 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

      </source>


Construct Class by Class Combination

<source lang="vbnet"> 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

      </source>


Four Level Hierachy

<source lang="vbnet"> 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

      </source>