Polymorphism using Abstract Classes in Visual Basic.NET 2005 - Life without the Abstract class in Visual Basic 2005: continued (Page 2 of 6 )
In the previous section, a "Rectangle" class was defined. In this section, two more classes are introduced as follows:
Public Class EquiTriangle
Private _h As Double
Private _b As Double
Public Sub New(ByVal breadth As Double, ByVal height As Double) 'code removed for clarity
Public Property H() As Double 'code removed for clarity
Public Property B() As Double 'code removed for clarity
Public Function GetArea() As Double
Return (1.0 / 2.0) * _b * _h
End Function
End Class
Public Class Square
Private _s As Double
Public Sub New(ByVal side As Double)
Me.S = side
End Sub
Public Property S() As Double
Get
Return _s
End Get
Set(ByVal value As Double)
_s = value
End Set
End Property
Public Function GetArea() As Double
Return _s * _s
End Function
End Class
If you observe the three classes "Rectangle," "EquiTriangle" and "Square," you will see several similarities. First of all, "GetArea" is available in all the classes (and it should be available for any of the shapes). In both "Rectangle" and "EquiTriangle," there exist two properties with almost the same signature along with constructors.
The code to test the above classes would be the following:
Dim r As New Rectangle(10, 20)
Dim s As New Square(5)
Dim t As New EquiTriangle(5, 20)
MessageBox.Show("Area of rectangle: " & r.GetArea)
MessageBox.Show("Area of square: " & s.GetArea)
MessageBox.Show("Area of triangle: " & t.GetArea)
Let us say I want the developers on my team to implement "GetArea" with the same signature as available in "Rectangle" (just to be consistent among all classes). If the developers define their own methods like "GetEquiTriangleArea" or "GetSquareArea," the code would not give any compilation error (or warning) and somehow I lose consistency.
To maintain signature consistency (without implementation) in our code and to enforce such rules, we can implement "abstract" classes, as defined in the next section.
Next: Defining and implementing abstract classes in Visual Basic 2005: abstract class >>
More Visual Basic.NET Articles
More By Jagadish Chaterjee