Following example with sample code will explain how to achieve Polymorphism in .Net using C# language.
abstract class A { public abstract String AbstractFunc(); //must be implementedand overriden in Derived classes. public virtual String VirtualFunc() //may Or may not beimplemented Or overriden in Derived classes. { return “Defined VirtualFunc() in Base class A.”; } }class B : A { public override String AbstractFunc() { return “Overriden AbstractFunc() in Derived class B.”; } public override String VirtualFunc() { return “Overriden VirtualFunc() in Derived class B.”; } }class C: A { public override String AbstractFunc() { return “Overriden AbstractFunc() in Derived class C.”; } public new String VirtualFunc()//VirtualFunc() not Overriden. { return “new (shadowed) VirtualFunc() in Derived class C.”; } }class D : A { public override String AbstractFunc() { return “Overriden AbstractFunc() in Derived class D.”; } //No VirtualFunc() implemented from Base class A. }Following sample code will use the classes declared above to depict how to simulate Polymorphism in .Net.
//Create Abstract Base class object.A objA = null;//Assign Derived class B.objA = new B();objA.AbstractFunc(); //Overriden AbstractFunc() in Derived class B.objA.VirtualFunc(); //Overriden VirtualFunc() in Derived class B.//Assign Derived class C.objA = new C();objA.AbstractFunc(); //Overriden AbstractFunc() in Derived class C.objA.VirtualFunc(); //Defined VirtualFunc() in Base class A.//Assign Derived class D.objA = new D();objA.AbstractFunc(); //Overriden AbstractFunc() in Derived class D.objA.VirtualFunc(); //Defined VirtualFunc() in Base class A.//Create new object for C.C objC = new C();objC.AbstractFunc(); //Overriden AbstractFunc() in Derived class C.objC.VirtualFunc(); //new (shadowed) VirtualFunc() in Derived class C.Thus, above example shows that the Polymorphism can be achieved in .Net through Abstract Functions and Virtual Functions.
Some general notes on Object Oriented Programming in C#:
1. Both Abstract Function and Virtual Function allow Polymorphism.2. For declaring Abstract Functions, Class must be declared as Abstract. Whereas, Virtual Functions can be declared in any Class. And Class cannot be declared as Virtual.
3. Abstract Functions must be implemented and overriden in Derived classes. Whereas, Virtual Functions may Or may not be implemented Or overriden in Derived classes.
4. An Abstract Function doesn’t contain definition. Definition must be provided by Derived classes by overriding Base class Abstract Function.
5. A Virtual Function contains definition. Virtual Function definition can be overridden by Derived classes. If not overridden by Derived classes, then Base class Virtual Function definition will be used, when being called using Base class object.
6. Base class object pointer to the Derived class will allow access to only inherited members from the Base class. Derived class members will not be accessible in this case.
Hope this helps,