Polymorphism :

May 11, 2011
  • Polymorphism means the ability to take more than one form.
  • An operation may exhibit different behaviors in different instances.
  • The behavior depends on the data types used in the operation.
  • Polymorphism is extensively used in implementing Inheritance.
  • It allows you to invoke methods of derived class through base class reference during runtime.
  • It has the ability for classes to provide different implementations of methods that are called through the same name.
public class Customer { public virtual void CustomerType() { Console.WriteLine("I am a customer"); } } public class CorporateCustomer : Customer { public override void CustomerType() { Console.WriteLine("I am a corporate customer"); } } public class PersonalCustomer : Customer { public override void CustomerType() { Console.WriteLine("I am a personal customer"); } } public class MainClass { public static void Main() { Customer[] C = new Customer[3]; C[0] = new CorporateCustomer(); C[1] = new PersonalCustomer(); C[2] = new Customer(); foreach (Customer CustomerObject in C) { CustomerObject.CustomerType(); } } }

Output:
I am a corporate customer
I am a personal customer
I am a customer

Method Overloading ( Compile Time Polymorphism):

  • Method with same name but with different arguments is called method overloading.
  • Method Overloading forms compile-time polymorphism.

Example of Method Overloading:

class A1 { void hello() { Console.WriteLine("Hello"); } void hello(string s) { Console.WriteLine("Hello {0}", s); } }

Method Overriding (Run Time Polymorphism) :

  • Method overriding occurs when child class declares a method that has the same type arguments as a method declared by one of its superclass.
  • Method overriding forms Run-time polymorphism.
  • Note: By default functions are not virtual in C# and so you need to write “virtual” explicitly. While by default in Java each function are virtual.

Example of Method Overriding:

class parent { virtual void hello() { Console.WriteLine("Hello from Parent"); } } class child : parent { override void hello() { Console.WriteLine("Hello from Child"); } } static void main() { parent objParent = new child(); objParent.hello(); } Output:
Hello from Child.