using System.Collections;
using System.Collections.Generic;
public static void Main()
Console.WriteLine("Hello World");
#region Contravarient Usage Types
Toyota MyCar = new Toyota();
Honda MyWifeCar = new Honda();
Console.WriteLine("============================");
List<Car> mycars = new List<Car>();
Console.WriteLine("============================");
IEnumerable<Car> myIEnumCars = mycars;
Console.WriteLine("============================");
ContraVarientDelegateType<Car> mydel = ShowColor;
ContraVarientDelegateType<Car> mydel1 = (car) => car.DisplayColor();
Console.WriteLine("============================");
#region Contravarient Methods
delegate void ContraVarientDelegateType <in T> (T a);
private static void ShowColor(Car car)
private static void ShowColor(List<Car> cars)
Console.WriteLine("List of Car colors ==>: ");
foreach(Car displaycar in cars)
displaycar.DisplayColor();
private static void ShowColor(IEnumerable<Car> cars)
Console.WriteLine("List of IEnum Car colors ==>: ");
foreach(Car displaycar in cars)
displaycar.DisplayColor();
private string color = "red";
public virtual void DisplayColor()
Console.WriteLine(" color : " + color );
public class Toyota : Car
private string color = "Totota red";
public override void DisplayColor()
Console.WriteLine(" color : " + color );
private string color = "Honda red";
public override void DisplayColor()
Console.WriteLine("color : " + color );