Noms de classes, de structures et d'interfaces

Remarque

Ce contenu est réimprimé avec l’autorisation de Pearson Education, Inc. à partir des Instructions de conception d’une infrastructure : conventions, idiomes et modèles des bibliothèques réutilisables .NET, 2ème édition. Cette édition a été publiée en 2008, et le livre a été entièrement révisé dans la troisième édition. Certaines informations de cette page peuvent être obsolètes.

Les instructions de nommage qui suivent s’appliquent au nommage des types généraux.

✔️ NOMMEZ les classes et structs avec des substantifs ou syntagmes nominaux, en utilisant la casse Pascal (PascalCasing).

Cela permet de distinguer les noms de type des méthodes, qui sont nommées avec des syntagmes verbaux.

✔️ NOMMEZ les interfaces avec des adjectifs, voire parfois avec des noms ou des syntagmes nominaux.

Les substantifs et syntagmes nominaux doivent être utilisés avec parcimonie car ils peuvent indiquer que le type doit être une classe abstraite et non une interface.

❌ NE PRÉFIXEZ PAS les noms de classe (par exemple, « C »).

✔️ ENVISAGEZ de terminer le nom des classes dérivées par le nom de la classe de base.

La lisibilité s’en retrouve améliorée et la relation clairement explicitée. Voici quelques exemples dans le code : ArgumentOutOfRangeException, qui est une sorte de Exception et SerializableAttribute, qui est une sorte de Attribute. Toutefois, il est important d’appliquer ces instructions avec discernement. Par exemple, la classe Button est une sorte d’événement Control, bien que Control n’apparaisse pas dans son nom.

✔️ PRÉFIXEZ les noms d’interface avec la lettre I, pour indiquer que le type est une interface.

Par exemple, IComponent (nom descriptif), ICustomAttributeProvider (syntagme nominal) et IPersistable (adjectif) sont des noms d’interface appropriés. Comme pour les autres noms de type, évitez les abréviations.

✔️ VEILLEZ à ce que les noms diffèrent uniquement par le préfixe « I » sur le nom d’interface lorsque vous définissez une paire classe-interface où la classe est une implémentation standard de l’interface.

Noms des paramètres de type générique

Des génériques ont été ajoutés à .NET Framework 2.0. Cette fonctionnalité a introduit une nouvelle sorte d’identificateur appelée paramètre de type.

✔️ NOMMEZ les paramètres de type générique avec des noms descriptifs, sauf si un nom composé d’une seule lettre est suffisamment évocateur et qu’un nom descriptif n’apporte rien de plus.

✔️ ENVISAGEZ d’utiliser T comme nom de paramètre de type pour les types ayant un paramètre de type d’une seule lettre.

public int IComparer<T> { ... }
public delegate bool Predicate<T>(T item);
public struct Nullable<T> where T:struct { ... }

✔️ PRÉFIXEZ les noms de paramètres de type descriptifs avec T.

public interface ISessionChannel<TSession> where TSession : ISession {
    TSession Session { get; }
}

✔️ ENVISAGEZ d’indiquer les contraintes placées sur un paramètre de type dans le nom du paramètre.

Par exemple, un paramètre limité à ISession peut être appelé TSession.

Noms des types communs

✔️ SUIVEZ les instructions décrites dans le tableau suivant pour nommer des types dérivés de certains types .NET Framework ou qui implémentent ces types.

Base Type Instructions pour les types dérivés/qui implémentent
System.Attribute ✔️ AJOUTEZ le suffixe « Attribute » aux noms des classes d’attributs personnalisées.
System.Delegate ✔️ AJOUTEZ le suffixe « EventHandler » aux noms des délégués utilisés dans les événements.

✔️ AJOUTEZ le suffixe « Callback » aux noms des délégués autres que ceux utilisés comme gestionnaires d’événements.

❌ N’AJOUTEZ PAS le suffixe « Delegate » à un délégué.
System.EventArgs ✔️ AJOUTEZ le suffixe « EventArgs ».
System.Enum ❌NE DÉRIVEZ PAS de cette classe ; utilisez plutôt le mot clé pris en charge par votre langage. Par exemple, en C#, utilisez le mot clé enum.

❌ N’AJOUTEZ PAS le suffixe « Enum » ou « Flag ».
System.Exception ✔️ AJOUTEZ le suffixe « Exception ».
IDictionary
IDictionary<TKey,TValue>
✔️ AJOUTEZ le suffixe « Dictionary ». Notez que IDictionary est un type spécifique de collection, mais que cette instruction prévaut sur les recommandations plus générales sur les collections qui suivent.
IEnumerable
ICollection
IList
IEnumerable<T>
ICollection<T>
IList<T>
✔️ AJOUTEZ le suffixe « Collection ».
System.IO.Stream ✔️ AJOUTEZ le suffixe « Stream ».
CodeAccessPermission IPermission ✔️ AJOUTEZ le suffixe « Permission ».

Nommage des énumérations

En général, les noms des types d’énumération (également appelés enums) doivent suivre les règles de nommage des types standard (casse Pascal, etc.). Toutefois, d’autres instructions s’appliquent spécifiquement aux enums.

✔️ UTILISEZ un nom de type singulier pour une énumération, sauf si ses valeurs sont des champs de bits.

✔️ UTILISEZ un nom de type pluriel pour une énumération avec des champs de bits en tant que valeurs, également appelée enum d’indicateurs.

❌ N’UTILISEZ PAS de suffixe « Enum » dans des noms de type enum.

❌ N’UTILISEZ PAS de suffixes « Flag » ou « Flags » dans des noms de type enum.

❌ N’UTILISEZ PAS de préfixe sur des noms de valeurs d’énumération (par exemple, « ad » pour les énumérations ADO, « rtf » pour les énumérations de texte enrichi, etc.).

Portions © 2005, 2009 Microsoft Corporation. Tous droits réservés.

Réimprimé avec l’autorisation de Pearson Education, Inc. et extrait de Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries, 2nd Edition par Krzysztof Cwalina et Brad Abrams, publié le 22 octobre 2008 par Addison-Wesley Professional dans le cadre de la série sur le développement Microsoft Windows.

Voir aussi