using System.Collections.Generic;
public static void Main()
static void setValuesA(A a){
static void covarianceInArrays()
A [] arrA = new A[]{new A()};
B [] arrB = new B[]{new B()};
C [] arrC = new C[]{new C()};
static void covarianceInGenerics()
List<A> lA = new List<A>{new A()};
List<B> lB = new List<B>{new B()};
List<C> lC = new List<C>{new C()};
static void contravariantActionExaple()
Action<A> acA = new Action<A>((a) => Console.WriteLine("Action A"));
Action<B> acB = new Action<B>((b) => Console.WriteLine("Action B"));
acB = new Action<B>((b) => Console.WriteLine("Action B"));
static void outInOnFucnExaple()
function = delegate(B b){ return b;};
function = delegate(B b){ return new D();};
public A(){Console.WriteLine("A");}
public B(){Console.WriteLine("B");}
public D(){Console.WriteLine("D");}
public C(){Console.WriteLine("C");}