HTML clipboardPolymorphism is the ability to define a method or property in a set of derived
classes with matching method signatures but provide different implementations
and then distinguish the objects' matching interface from one another at runtime
when you call the method on the base class.
From within the derived class that has an override method, you still can access
the overridden base method that has the same name by using the base keyword.
Polymorphism Example
'
notice the comments/warnings in the Main
' calling overridden methods from the base class
Class
TestClass
Public
Class
Square
Public x
As
Double
' Constructor:
Public
Sub
New(ByVal
x As
Double)
Me.x = x
End
Sub
Public
Overridable
Function
Area() As
Double
Return x * x
End
Function
End
Class
Private
Class
Cube
Inherits
Square
' Constructor:
Public
Sub
New(ByVal
x As
Double)
MyBase.New(x)
End
Sub
' Calling the Area base method:
Public
Overrides
Function
Area() As
Double
Return (6 * (MyBase.Area()))
End
Function
End
Class
Public
Shared
Sub
MyFormat(ByVal
value As
IFormattable,
ByVal
formatString As
String)
Console.WriteLine("{0}"
& vbTab & "{1}",
formatString, value.ToString(formatString,
Nothing))
End
Sub
Shared
Sub
Main()
Dim x
As
Double
= 5.2
Dim s
As
New
Square(x)
Dim c
As
Square
= New
Cube(x)
' This is OK, polymorphic
' a base
reference can refer to the derived object
Console.Write("Area
of Square = ")
MyFormat(s.Area(), "n")
Console.Write("Area
of Cube = ")
MyFormat(c.Area(), "n")
' ERROR: Cube q = new Square(x);
' Cannot
implicitly convert type 'TestClass.Square' to 'TestClass.Cube'
Dim q1
As
Cube
= DirectCast(c,
Cube)'
This is OK, polymorphic
Console.Write("Area
of Cube again = ")
MyFormat(q1.Area(), "n")
Console.ReadLine()
' try uncommenting the following line and see if it works
' Cube q2 =
(Cube) new Square(x);
' This
compiles but is this OK? NO!
'Runtime
Exception occurs here: System.InvalidCastException:
'An exception
of type System.InvalidCastException was thrown.
' A derived
reference should not be transformed from base object,
' since the
orphaned parts may occur in the derived.
' Cube
constructors those may be necessary had not worked up to now for q2.
' C# compiles
code but gives an exception during runtime
End
Sub
End
Class
Conclusion
Hope this blog would have helped
you in understanding Polymorphism in VB.NET.