Nombres de clases, estructuras e interfaces

Nota:

Este contenido se reimprime con permiso de Pearson Education, Inc. de Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries, 2.ª edición. Esa edición se publicó en 2008 y el libro se ha revisado completamente en la tercera edición. Parte de la información de esta página puede estar obsoleta.

Las instrucciones de nomenclatura siguientes se aplican a la nomenclatura de tipos generales.

✔️ Nombra las clases y los structs con sustantivos o frases de la ONU, utilizando PascalCasing.

Esto distingue los nombres de tipo de los métodos, que se denominan con frases de verbo.

✔️ Nombra las interfaces con frases adjetivas, o ocasionalmente con sustantivos o frases de sustantivo.

Los nombres y las frases sustantivos deben usarse rara vez y podrían indicar que el tipo debe ser una clase abstracta y no una interfaz.

❌ NO asignes un prefijo a los nombres de clase (por ejemplo, «C»).

✔️ CONSIDERA la posibilidad de finalizar el nombre de las clases derivadas con el nombre de la clase base.

Esto es muy legible y explica claramente la relación. Algunos ejemplos de esto en el código son: ArgumentOutOfRangeException, que es un tipo de Exceptiony SerializableAttribute, que es un tipo de Attribute. Sin embargo, es importante utilizar un criterio razonable para aplicar esta guía; por ejemplo, la Button clase es un tipo de Control evento, aunque Control no aparece en su nombre.

✔️ Antepón a los nombres de las interfaces la letra I, para indicar que el tipo es una interfaz.

Por ejemplo, IComponent (sustantivo descriptivo), ICustomAttributeProvider (frase sustantivo) y IPersistable (adjetivo) son nombres de interfaz adecuados. Al igual que con otros nombres de tipo, evita abreviaturas.

✔️ Asegúrate de que los nombres solo difieren por el prefijo «I» en el nombre de la interfaz cuando se define un par de clase-interfaz donde la clase es una implementación estándar de la interfaz.

Nombre de parámetros de tipo genérico

Los genéricos se agregaron a .NET Framework 2.0. La característica introdujo un nuevo tipo de identificador denominado parámetro de tipo.

✔️ Asigna nombres descriptivos a los parámetros de tipo genérico, a no ser que un nombre de una sola letra sea completamente claro y un nombre descriptivo no agregue ningún valor.

✔️ CONSIDERA el uso de T como el nombre del parámetro de tipo para los tipos con un parámetro de tipo de una sola letra.

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

✔️ PREFIJA los nombres de parámetro de tipo descriptivos con T.

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

✔️ CONSIDERA la posibilidad de indicar restricciones que se encuentran en un parámetro de tipo en el nombre del parámetro.

Por ejemplo, un parámetro restringido a ISession puede llamarse TSession.

Nombres de tipos comunes

✔️ SIGUE las instrucciones descritas en la tabla siguiente al asignar nombres a tipos derivados de o implementar determinados tipos de .NET Framework.

Tipo base Guía de tipo derivada o de implementación
System.Attribute ✔️ AGREGA el sufijo «Attribute» a los nombres de las clases de atributos personalizados.
System.Delegate ✔️ AGREGA el sufijo «EventHandler» a los nombres de delegados que se usan en eventos.

✔️ AGREGA el sufijo «Callback» a los nombres de delegados distintos de los usados como controladores de eventos.

❌ NO agregues el sufijo «Delegate» a un delegado.
System.EventArgs ✔️ AGREGA el sufijo «EventArgs.»
System.Enum ❌ NO derives de esta clase; usa la palabra clave compatible con el idioma en su lugar; por ejemplo, en C#, usa la palabra clave enum.

❌ NO agregues el sufijo «Enum» o «Flag».
System.Exception ✔️ AGREGA el sufijo «Exception».
IDictionary
IDictionary<TKey,TValue>
✔️ AGREGA el sufijo «Dictionary». Ten en cuenta que IDictionary es un tipo específico de colección, pero esta guía tiene prioridad sobre la guía de recopilación más general que sigue.
IEnumerable
ICollection
IList
IEnumerable<T>
ICollection<T>
IList<T>
✔️ AGREGA el sufijo «Collection.»
System.IO.Stream ✔️ AGREGA el sufijo «Stream.»
CodeAccessPermission IPermission ✔️ AGREAGA el sufijo «Permission.»

Enumeraciones de nomenclatura

Los nombres de los tipos de enumeración (también denominados enumeraciones) en general deben seguir las reglas de nomenclatura de tipos estándar (PascalCasing, etc.). Sin embargo, hay directrices adicionales que se aplican específicamente a las enumeraciones.

✔️ USA un nombre de tipo singular para una enumeración a menos que sus valores sean campos de bits.

✔️ USA un nombre de tipo plural para una enumeración con campos de bits como valores, también denominados enumeración flags.

❌ NO uses un sufijo «Enum» en los nombres de tipo de enumeración.

❌ NO uses los sufijos «Flag» o «Flags» en los nombres de tipo de enumeración.

❌ NO uses un prefijo en los nombres de valores de enumeración (por ejemplo, «ad» para enumeraciones de ADO, «rtf» para enumeraciones de texto enriquecido, etc.).

Portions © 2005, 2009 Microsoft Corporation. Todos los derechos reservados.

Material reimpreso con el consentimiento de Pearson Education, Inc. y extraído de Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries, 2nd Edition (Instrucciones de diseño de .NET Framework: convenciones, expresiones y patrones para bibliotecas .NET reutilizables, 2.ª edición), de Krzysztof Cwalina y Brad Abrams, publicado el 22 de octubre de 2008 por Addison-Wesley Professional como parte de la serie Microsoft Windows Development.

Vea también