Demonstrate 'is a' relationship : Is « Language Basics « VB.Net






Demonstrate 'is a' relationship

Demonstrate 'is a' relationship
Imports System

Public Class MainClass

    Shared Sub Main(ByVal args As String())
      Dim point1, point2 As Point
      Dim circle1, circle2 As Circle

      point1 = New Point(30, 50)
      circle1 = New Circle(120, 89, 2.7)

      Console.WriteLine( "Point point1: " & point1.ToString() & _
         vbCrLf & "Circle circle1: " & circle1.ToString() )

      ' use is-a relationship to assign Circle to Point reference
      point2 = circle1

      Console.WriteLine( "Circle circle1 (via point2): " & point2.ToString())

      ' downcast (cast base-class reference to derived-class 
      ' data type) point2 to circle2
      circle2 = CType(point2, Circle) ' allowed only via cast

      Console.WriteLine( "Circle circle1 (via circle2): " & circle2.ToString() )

      Console.WriteLine( "Area of circle1 (via circle2): " & _
         String.Format("{0:F}", circle2.Area()) )

      ' assign Point object to Circle reference
      If (TypeOf point1 Is Circle) Then
         circle2 = CType(point1, Circle)
         Console.WriteLine( "cast successful" )
      Else
         Console.WriteLine( "point1 does not refer to a Circle" )
      End If
    End Sub
End Class


Public Class Circle
   Inherits Point ' Circle Inherits from class Point

   Private mRadius As Double

   ' 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)

      ' use MyBase reference to Point constructor explicitly
      MyBase.New(xValue, 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 must be nonnegative
            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 Overridable Function Area() As Double
      Return Math.PI * mRadius ^ 2
   End Function ' Area

   ' return String representation of Circle
   Public Overrides Function ToString() As String

      ' use MyBase reference to return Circle String representation
      Return "Center= " & MyBase.ToString() & _
         "; Radius = " & mRadius
   End Function ' ToString

End Class

Public Class Point

   ' 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 xValue As Integer)
         mX = xValue ' no need for validation
      End Set

   End Property ' X

   ' property Y 
   Public Property Y() As Integer

      Get
         Return mY
      End Get

      Set(ByVal yValue As Integer)
         mY = yValue ' no need for validation
      End Set

   End Property ' Y

   ' return String representation of Point
   Public Overrides Function ToString() As String
      Return "[" & mX & ", " & mY & "]"
   End Function ' ToString

End Class
           
       








Related examples in the same category