102 votes

Vous utilisez un 'using alias = class' avec des types génériques?

Alors parfois, je veux inclure d'une seule classe à partir d'un espace de noms plutôt que tout un espace de noms, comme dans l'exemple ici, j'ai créer un alias de cette classe avec l'aide de déclaration:

using System;
using System.Text;
using Array = System.Collections.ArrayList;

Je fais souvent cela avec les médicaments génériques, de sorte que je n'ai pas à 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 un type générique:

using List<T> = System.Collections.Generic.List<T>;

Mais cela ne veut pas compiler, donc est-il possible de parvenir à la création de cet alias, tout en laissant le type générique?

113voto

JaredPar Points 333733

Non, il n'y en a pas. Un alias de type en C # doit être un type fermé (c'est-à-dire totalement résolu) pour 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 une déclaration de type générique non liée 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
}
 

13voto

George Birbilis Points 321

comme indiqué au 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>;

et ensuite utiliser

gen::List<int> x = new gen::List<int>;

ou

GenList x = new GenList();

cependant, vous avez à reproduire à l'aide de ces définitions à chaque fichier là où vous les utilisez, ainsi, si vous apportez des modifications à l'avenir et oublier de mettre à jour à chaque fichier, les choses vont casser mal.

J'espère que C# dans le futur Permettra de traiter des alias comme le faire avec des méthodes d'extension et de vous permettre de définir un grand nombre d'entre eux dans un fichier que vous utilisez ailleurs, puis de les maintenir à un endroit et à masquer l'intérieur inutile de type cartographie des détails du type de consommateurs.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X