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.