polymorphism c# example

Example 1: c# polymorphism

class Animal{
  public virtual void animalSound() {
    Console.WriteLine("The animal makes a sound");
  }
}

class Pig: Animal {
  public  override void animalSound() {//override superclass method
    Console.WriteLine("The pig says: wee wee");
  }
}

class Dog: Animal {
  public override void animalSound() {//override superclass method
    Console.WriteLine("The dog says: bow wow");
  }
}

static class main {
  static void Main(){
    //You can add all objects inherited from Animal to an Animal type list
    Animal[] animals = new Animal[3]; //Creating the Animal List
    animals[0] = new Animal(); //Add a new animal object to the list
    animals[1] = new Dog(); //Add a new dog object to the list
    animals[2] = new Pig(); //Add a pig object to the list
    foreach (Animal a in animals){
      a.animalSound(); //This statement prints the correct string no matter the class
    }
  }
}

Example 2: what is polymorphism

POLYMORPHISM: It is an ability of object to behave in multiple
form. The most common use of polymorphism is Java, when a
parent class reference type of variable is used to refer to a child
class object.
In my framework
  E.g.: WebDriver driver = new ChromeDriver();
We use method overloading and overriding to achieve
Polymorphism.

There are two types of achieving Polymorphism
Upcasting & Downcasting
Upcasting is casting a subtype to a supertype, 
going up in the inheritance tree.
It is done implicitly
 in order to use method available on any
 interface/class, the object should be of
 same class or of class implementing the interface.  
   WebDriver driver = new ChromeDriver();
or
	TakeScreenShot ts = new ChromeDriver();
    
    Downcasting is casting to a subtype, 
going down in the inheritance tree.
It is done to access sub class features.
It has to be done manually

ChromeDriver driver = (ChromeDriver)Webdriver;

Example 3: polymorphism in c#

public class X  
{  
    public virtual void A()  
    {  
    }  
}  
public class Y : X  
{  
    public override void A()  
    {  
    }  
}