Question

Existe-t-il des conventions de dénomination ou de codage établies pour définir un espace de noms ou des alias de type en C #?

Pour ceux qui ne le savent pas, le langage C # comporte une fonctionnalité dans laquelle des alias peuvent être définis localement dans un fichier pour les espaces de noms et les types. Cela peut être utile en cas de conflits de noms avec des bibliothèques tierces, ainsi que pour réduire les noms de types dans votre code. Vous trouverez ci-dessous un exemple de ce à quoi il ressemble.

using Forms = System.Windows.Forms;

La plupart des exemples que j'ai vus sur le Web ont tendance à utiliser des noms en majuscules non abrégés comme des alias tels que l'alias Forms dans l'exemple ci-dessus. Dans certains endroits, notamment la page officielle MSDN , qui explique un exemple avec un alias colAlias ?? pour l'espace de noms System.Collections . Pour compliquer les choses, certains pourraient préférer choisir des consignes différentes, selon qu’un alias d’espace de nom ou un alias de type est en cours de définition.

Afin d’expliquer pourquoi je suis intéressé par les directives portant des pseudonymes, j’expliquerai ce que je fais. Dans un projet récent, j'ai commencé à simplifier un modèle dans lequel j'ai plusieurs classes qui héritent d'une classe de base générique qui accepte des arguments de type complexes en utilisant des alias de type.

En utilisant cette technique, l’exemple complexe ci-dessous devient donc beaucoup plus lisible une fois que les alias de types sont appliqués.

public class MyClass: MyGenericBaseClass<TripleLindyFancyAlgorithm<List<SomeValueType>>, List<SomeValueType>>
{
    public override List<SomeValueType> DoSomething(TripleLindyFancyAlgorithm<List<SomeValueType>> operation)
    {
        // ...
    }
 }

Et en dessous de la version must cleaner utilisant des alias de types.

using Result = List<SomeValueType>;
using Algorithm = TripleLindyFancyAlgorithm<List<SomeValueType>>; // Note: cannot reference an alias within an alias definition!

public class MyClass: MyGenericBaseClass<Algorithm, Result>
{
    public override Result DoSomething(Algorithm operation)
    {
        // ...
    }
 }

Bien que cela paraisse beaucoup plus simple, il est facile d'oublier qu'un alias tel que Résultat n'est en réalité qu'un alias pour List et qu'il n'existe aucun type réel appelé Résultat . . Afin de séparer visuellement les concepts, nous envisageons de suivre une convention de préfixe similaire à l'utilisation du trait de soulignement '_' avant les membres privés afin de distinguer les alias de types des types réels. Auparavant, je tiens toutefois à ne pas réinventer la roue, car il existe peut-être déjà des conventions plus établies.

Était-ce utile?

La solution

Les alias d'espaces de noms ne sont pas une caractéristique courante de la plupart des bases de code. C'est le dernier endroit où je l'ai utilisé, mais le développeur principal ne le connaissait pas bien qu'il ait travaillé avec C # pendant de nombreuses années.

Comme c'est rare, aucune convention n'a été développée pour cela.

Je dirais que si vous utilisez des alias, discutez-en avec votre équipe pour créer votre propre convention.

J'ai vu les alias utilisés de différentes manières:

  • Un acronyme de l'espace de noms. Habituellement, les majuscules dans l’espace de noms.
  • La toute fin de l'espace de noms - si pluriel hors pluriel.
  • Nom abrégé descriptif.

Autres conseils

Je n’utiliserais les alias que dans le cas d’un conflit d’espace de nommage (c’est-à-dire que si j'avais à).

Pour moi du moins, toute autre utilisation est source de confusion et de distraction.

Personnellement, je ne l'utiliserais que pour garder intelli-sense clean.

using StringBuilder = System.Text.StringBuilder;

Si vous renommez des types, vous ouvrez la boîte de Pandore aux programmeurs de maintenance.

Les deux cas les plus courants d’alias d’espace de nom sont les suivants:

  1. Je l'ai vu et je l'utilise (comme tendance)
  2. Je code le code d'une autre langue

Pour le premier cas, pas de commentaire. Pour le second exemple, un bon exemple est le portage du code depuis C et l’utilisation d’alias d’espace de nom pour des raisons pratiques, comme:

using i64 = System.Int64;
using u8 = System.Byte;
using u32 = System.UInt32;
using u64 = System.UInt64;

Même si vous considérez les alias ci-dessus comme une programmation paresseuse, ils aident à éviter les erreurs.

Je pense que les personnes qui sont enclines à ne pas les utiliser du tout donnent la réponse que vous leur avez demandée. Ce est la convention. Cela ne veut pas dire que cela ne peut pas être utile, mais ne pas l'utiliser reste la norme.

Vous pouvez adopter une convention pour les utiliser pour l'abstraction.

using Id = System.Int32;

De cette façon, vous pouvez facilement remplacer cette ligne par

.
using Id = System.Guid;

à un moment donné et aucun autre code ne devrait être modifié (en supposant que vous n'avez pas jeté un coup d'oeil par l'abstraction pour créer des dépendances sur le type réel ...)

En général, je ne les utilise que lorsque j'ai besoin d'utiliser deux classes de même nom dans des espaces de noms différents et que je ne souhaite pas spécifier le type dans le code:

using xItem = My.Project.NameSpace.Item;
using yItem = Your.ThirdParty.Framework.Item;
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top