convertir explicitement des paramètres de type générique pour n'importe quelle interface

Dans Les génériques FAQ: les Meilleures Pratiques dit :

Le compilateur va vous permettre de convertir explicitement des paramètres de type générique pour n'importe quelle interface, mais pas à une classe:

interface ISomeInterface
{...}
class SomeClass
{...}
class MyClass<T> 
{
   void SomeMethod(T t)
   {
      ISomeInterface obj1 = (ISomeInterface)t;//Compiles
      SomeClass      obj2 = (SomeClass)t;     //Does not compile
   }
}

Je vois limitation raisonnable pour les deux, les classes et les interfaces, à moins que la classe/interface n'est pas spécifié comme type de contrainte.

Alors pourquoi un tel comportement, pourquoi il est permis pour les interfaces ?

  • ooh un clr question. où est john skeet.
  • Je pense que tu veux dire Eric Lippert...
  • Juste à noter que l'article lié est à partir de 2005 - les médicaments Génériques ont changé depuis.
  • Oui, il peut m'arriver d'être changé. Même alors, c'était quoi l'idée derrière ? Ce qui fait compilateur supposer que le type générique peut être utilisé à n'importe quelle interface ?
InformationsquelleAutor Incognito | 2011-06-20