Nomi di classi, struct e interfacce

Nota

Questo contenuto viene ristampato con l'autorizzazione di Pearson Education, Inc. da Framework Design Guidelines: Conventions, Idiomsn and Patterns for Reusable .NET Libraries, 2nd Edition. Tale edizione è stata pubblicata nel 2008 e il libro è stato completamente rivisto nella terza edizione. Alcune informazioni in questa pagina potrebbero non essere aggiornate.

Le linee guida per la denominazione che seguono si applicano alla denominazione generale dei tipi.

✔️ NOMINARE classi e struct con nomi o frasi nominali, usando PascalCasing.

Questo distingue i nomi dei tipi dai metodi, denominati con frasi verbali.

✔️ NOMINARE le interfacce con frasi aggettivali, o occasionalmente con sostantivi o frasi nominali.

I sostantivi e le frasi nominali devono essere usati raramente e potrebbero indicare che il tipo deve essere una classe astratta e non un'interfaccia.

❌ NON assegnare nomi di classe a un prefisso (ad esempio, "C").

✔️ PRENDERE IN CONSIDERAZIONE di terminare il nome delle classi derivate con il nome della classe di base.

Questo le rende molto leggibili e spiega chiaramente la relazione. Alcuni esempi di questo in codice sono: ArgumentOutOfRangeException, che è un tipo di Exception, e SerializableAttribute, che è un tipo di Attribute. Tuttavia, è importante usare un giudizio ragionevole nell'applicazione di questa linea guida; ad esempio, la classe Button è un tipo di evento Control, anche se Control non viene visualizzato nel nome.

✔️ AGGIUNGERE come prefisso ai nomi di interfaccia la lettera I, per indicare che il tipo è un'interfaccia.

Ad esempio, IComponent (sostantivo descrittivo), ICustomAttributeProvider (frase sostantiva) e IPersistable (aggettivo) sono nomi di interfaccia appropriati. Come con altri nomi di tipo, evitare abbreviazioni.

✔️ ASSICURARSI che i nomi differiscano solo dal prefisso "I" sul nome dell'interfaccia quando si definisce una coppia di interfacce di classe in cui la classe è un'implementazione standard dell'interfaccia.

Nomi dei parametri di tipo generico

I generics sono stati aggiunti a .NET Framework 2.0. La funzionalità ha introdotto un nuovo tipo di identificatore denominato parametro di tipo.

✔️ ASSEGNARE ai parametri di tipo generico nomi descrittivi, a meno che un nome di una sola lettera non sia già completamente comprensibile, senza che sia necessario un nome descrittivo più lungo.

✔️ PRENDERE IN CONSIDERAZIONE di usare T come nome del parametro di tipo per i tipi con un parametro di tipo a lettera singola.

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

✔️ AGGIUNGERE ai nomi di parametro di tipo descrittivi il prefisso T.

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

✔️ CONSIDERARE di indicare i vincoli inseriti in un parametro di tipo nel nome del parametro.

Ad esempio, un parametro vincolato a ISession potrebbe essere chiamato TSession.

Nomi di tipi comuni

✔️ SEGUIRE le linee guida descritte nella tabella seguente quando si nominano tipi derivati da o che implementano determinati tipi .NET Framework.

Base Type Linee guida per i tipi derivati/di implementazione
System.Attribute ✔️ AGGIUNGERE il suffisso "Attribute" ai nomi delle classi di attributi personalizzate.
System.Delegate ✔️ AGGIUNGERE il suffisso "EventHandler" ai nomi dei delegati usati negli eventi.

✔️ AGGIUNGERE il suffisso "Callback" ai nomi dei delegati diversi da quelli usati come gestori eventi.

❌ NON aggiungere il suffisso "Delegato" a un delegato.
System.EventArgs ✔️ AGGIUNGERE il suffisso "EventArgs".
System.Enum ❌ NON derivare da questa classe; usare invece la parola chiave supportata dalla lingua; ad esempio, in C#, usare la parola chiave enum.

❌ NON aggiungere il suffisso "Enum" o "Flag".
System.Exception ✔️ AGGIUNGERE il suffisso "Exception".
IDictionary
IDictionary<TKey,TValue>
✔️ AGGIUNGERE il suffisso "Dictionary". Si noti che IDictionary è un tipo specifico di raccolta, ma questa linea guida ha la precedenza sulle linee guida più generali sulle raccolte che seguono.
IEnumerable
ICollection
IList
IEnumerable<T>
ICollection<T>
IList<T>
✔️ AGGIUNGERE il suffisso "Collection".
System.IO.Stream ✔️ AGGIUNGERE il suffisso "Stream".
CodeAccessPermission IPermission ✔️ AGGIUNGERE il suffisso "Permission".

Enumerazioni di denominazione

I nomi dei tipi di enumerazione (chiamati anche enumerazioni) in generale devono seguire le regole di denominazione dei tipi standard (PascalCasing e così via). Esistono tuttavia delle linee guida aggiuntive che si applicano in modo specifico alle enumerazioni.

✔️ USARE un nome di tipo singolare per un'enumerazione, a meno che i relativi valori non siano campi di bit.

✔️ USARE un nome di tipo plurale per un'enumerazione con campi di bit come valori, detto anche enumerazione flag.

❌ NON usare un suffisso "Enum" nei nomi dei tipi enum.

❌ NON usare i suffissi "Flag" o "Flags" nei nomi dei tipi di enumerazione.

❌ NON utilizzare un prefisso sui nomi dei valori delle enumerazioni (ad esempio, "ad" per le enumerazioni ADO, "rtf" per le enumerazioni rich text, ecc.).

Parti protette da copyright © 2005, 2009 Microsoft Corporation. Tutti i diritti sono riservati.

Ristampato con l'autorizzazione di Pearson Education, Inc. da Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries, 2a edizione di Krzysztof Cwalina and Brad Abrams, pubblicato il 22 ottobre 2008 da Addison-Wesley Professional nella collana Microsoft Windows Development Series.

Vedi anche