5 votes

Quand utiliser un alias dans une directive d'utilisation ?

Je lisais les documents MSDN et je suis tombé sur.. :

http://msdn.microsoft.com/en-us/library/sf0df423.aspx

Quelle est l'utilité pratique d'utiliser un alias pour using des directives ?

Je comprends ce qu'il fait, mais je ne comprends pas pourquoi je voudrais l'utiliser.

11voto

Servy Points 93720

C'est utile si vous avez une classe du même nom dans deux espaces de noms différents. Dans ce cas, vous avez deux possibilités. using un espace de nom et pas un autre (c'est-à-dire utiliser le nom pleinement qualifié pour l'autre), ou using un espace de nom normalement et using un autre avec un alias. Comme l'alias est plus court que le nom pleinement qualifié, c'est toujours plus facile et plus pratique.

Évidemment, la meilleure option est de ne pas avoir de classes publiques du même nom dans des espaces de noms différents, surtout s'il y a une chance que quelqu'un veuille utiliser les deux dans la même classe.

6voto

ionden Points 5595

Par exemple, vous pouvez utiliser dans votre classe 2 autres classes avec le même nom mais dans des espaces de noms différents. Par exemple :

 using TextBoxForms = System.Windows.Forms.TextBox
 using TextBoxWeb = System.Web.UI.WebControls.TextBox

5voto

Matthew Points 10499

J'aime l'utiliser pour les génériques, car les écrire peut parfois être très long.

using NatMap = System.Collections.Generic.Dictionary<IPAddress, IPAddress[]>;
...
NatMap natMap = new NatMap();

Lors de l'utilisation d'une fonction :

void PrintNat(NatMap natMap) {
    foreach (IPAddress[] addresses in natMap) {
        foreach (IPaddress address in addresses) {
            // bla bla bla
        }
    }
}

4voto

Robert Rouhani Points 8317

Il y a deux très bonnes raisons de l'utiliser :

  1. Il y a une collision de noms (deux classes dans des espaces de noms distincts avec le même nom). Au lieu d'écrire le type entièrement qualifié (y compris l'espace de noms complet), vous pouvez aliaser l'une d'entre elles avec un nom beaucoup plus court mais tout aussi descriptif.

    a. Exemple : Disons que vous avez un projet qui contient une classe KeyValuePair<TKey, TValue> et vous utilisez aussi System.Collections.Generic pour autre chose. Vous pouvez aliaser votre classe avec using MyStringIntPair = MyProject.Collections.Generic.KeyValuePair<string, int> et votre code aura l'air beaucoup plus propre pour ne pas avoir MyProject.Collections.Generic partout.

  2. Interop native. J'ai personnellement trouvé cela très utile lorsqu'il s'agit de l'interopérabilité native. long type. Sur la plupart des systèmes d'exploitation, un long a la même taille qu'un pointeur, mais sous Windows 64 bits, c'est la même chose qu'un int. Ainsi, pour la plupart des systèmes d'exploitation, je peux représenter un objet long comme un IntPtr Je crée donc un alias de type et je modifie sa définition à l'aide d'une directive du préprocesseur.

    a. FreeType utilise long et donc, lorsque j'ai écrit des liens pour ce programme, j'ai dû faire en sorte qu'il fonctionne également sous Windows 64 bits. J'ai envisagé une sorte de sous-classement dynamique basé sur le système d'exploitation, mais la directive du préprocesseur et les alias de type étaient plus simples et ont permis de faire le travail pour le moment. Un exemple serait la structure FT_BBox, qui utilise des longs caractères. .

Version simplifiée et pertinente de la structure FT_BBox ci-dessous :

using System;
using System.Runtime.InteropServices;

#if WIN64
using FT_Pos = System.Int32;
#else
using FT_Pos = System.IntPtr;
#endif

namespace SharpFont.Internal
{
    /// <summary>
    /// Internally represents a BBox.
    /// </summary>
    /// <remarks>
    /// Refer to <see cref="BBox"/> for FreeType documentation.
    /// </remarks>
    [StructLayout(LayoutKind.Sequential)]
    internal struct BBoxRec
    {
        internal FT_Pos xMin, yMin;
        internal FT_Pos xMax, yMax;
    }
}

3voto

glosrob Points 4318

De ce lien

Créez un alias d'utilisation pour faciliter la qualification d'un identifiant à un espace de noms ou à un type. Le côté droit d'une directive using alias doit toujours être un type entièrement qualifié, quelles que soient les directives using qui la précèdent.

Ainsi, vous pouvez changer un type de

Foo.Bar.Foo.Bar.Foo.Bar.Foo.Bar.Foo.Bar.Foo.Bar

à quelque chose de plus gérable comme

FooBar

En particulier si vous avez plusieurs espaces de noms qui se heurtent

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