Donc, parfois, je veux inclure une seule classe d'un espace de noms plutôt qu'un espace de noms entier, comme l'exemple ici, je crée un alias pour cette classe avec l'instruction using:
using System;
using System.Text;
using Array = System.Collections.ArrayList;
Je le fais souvent avec des génériques pour ne pas avoir à répéter les arguments:
using LookupDictionary = System.Collections.Generic.Dictionary<string, int>;
Maintenant, je veux accomplir la même chose avec un type générique, tout en le préservant comme type générique:
using List<T> = System.Collections.Generic.List<T>;
Mais cela ne se compile pas, donc existe-t-il un moyen de créer cet alias tout en laissant le type générique?
Non, il n'y en a pas. Un alias de type en C # doit être un type fermé (alias entièrement résolu) afin que les génériques ouverts ne soient pas pris en charge
Ceci est couvert dans la section 9.4.1 de la spécification du langage C #.
L'utilisation d'alias peut nommer un type construit fermé, mais ne peut pas nommer un type générique non lié déclaration sans fournir d'arguments de type.
namespace N2
{
using W = N1.A; // Error, cannot name unbound generic type
using X = N1.A.B; // Error, cannot name unbound generic type
using Y = N1.A<int>; // Ok, can name closed constructed type
using Z<T> = N1.A<T>; // Error, using alias cannot have type parameters
}
comme indiqué sur http://msdn.Microsoft.com/en-us/library/sf0df423.aspx et http://msdn.Microsoft.com/en-us/library/ c3ay4x3d% 28VS.80% 29.aspx , vous pouvez le faire
using gen = System.Collections.Generic;
using GenList = System.Collections.Generic.List<int>;
puis utiliser
gen::List<int> x = new gen::List<int>;
ou
GenList x = new GenList();
cependant, vous devez répliquer ceux qui utilisent des définitions dans chaque fichier où vous les utilisez, donc si vous y apportez des modifications à l'avenir et oubliez de mettre à jour à chaque fichier, les choses vont mal se passer.
J'espère que C # à l'avenir traitera les alias comme le font les méthodes d'extension et vous permettra de définir bon nombre d'entre eux dans un fichier que vous utilisez ailleurs, puis de les conserver à un endroit et de masquer les détails de mappage de type inutiles internes aux consommateurs de type.