2015-09-21 1 views

Répondre

6

La différence est que T2 ne peut pas être n'importe quel Foo il doit être un Foo qui est dérivé de T1.

Par exemple

public class Foo{} 
public class Foo1 : Foo {} 
public class Foo2 : Foo {} 
public class Foo12 : Foo1 {} 
public class A<T1,T2> where T1: Foo where T2 : T1 {} 

permettra

var a = new A<Foo1, Foo12>() 

mais pas

var a = new A<Foo1, Foo2>() 

Cela signifie également que vous pouvez en toute sécurité jeter un objet de type T2-T1.

Est-ce la même chose en cas de variance?

La variance ne joue que sur les interfaces.

+0

Vous avez mal typé 'class' dans la définition de classe générique. –

+0

@DaveZych Merci d'avoir signalé cela. – juharr