C# 2.0 mette a disposizione due nuove features:

Contravariance
Vi permette di passare ad un delegate un tipo che sta piu' in alto nella catena di ereditarieta' del tipo dichiarato nel delegate.
Covariance
Permette di far ritornare ad un delegate un tipo il quale eredita dal tipo definito nel delegate.

public class A
{
 public static void Foo1(A param) { }
}

 public class B : A
 {
  public static void Foo2(B param) { }
  public static B CreateB()  {  return null; }
 }

  public class C : B
  {
   public static void Foo3(C param) { }
   public static C CreateC(){return null;}
  }

  public delegate void Test(C param);
  public delegate B Test2();

Test t = new Test(A.Foo1);          //Contravariance
Test2 t2 = new Test2(C.CreateC); //Covariance

VB2005 non supporta Covariance e Contravariance