Convención de nombres en c #

¿Cuál es la convención de nomenclatura universalmente aceptada para c #? (funciones, clases, parámetros, variables locales, espacios de nombres, etc.)

Microsoft tiene un excelente conjunto de directrices sobre el diseño de la biblioteca de clase , incluida una sección sobre nombres . En resumen (ejemplos entre paréntesis):

  • Clases / estructuras: PascalCase ( WebRequest )
  • Interfaces: PascalCase con I prefijo ( IDisposable )
  • Métodos: PascalCase ( ToUpper )
  • Propiedades: PascalCase ( Length )
  • Eventos: PascalCase ( Click )
  • Espacios de nombres: PascalCase ( System.Collections ; inusual tener dos palabras en una parte)
  • Variables no constantes, incluidos los parámetros: camelCased ( keySelector )
  • Constantes: PascalCase ( Int32.MaxValue )
  • Enumeraciones: PascalCase, singular para non-flags y plural para flags ( HttpStatusCode , BindingFlags )
  • Atributos: PascalCase con el sufijo “Attribute” ( ThreadStaticAttribute )

Los nombres privados dependen de usted, pero tiendo a seguir las mismas convenciones que para todo lo demás. Se desaconseja la notación húngara (en el estilo de Win32), aunque muchos lugares usan “m_” o “_” como un prefijo para variables de instancia.

El estándar .NET de Microsoft usa Pascal Case para espacios de nombres, miembros públicos y protegidos (básicamente, cualquier elemento visible para otras clases). Para los miembros privados y las variables locales, hay mucho más espacio para hacer lo que sea más cómodo para usted y su equipo.

Las pautas de Resharper sugieren


  • Tipos y espacios de nombre UpperCamelCase
  • Interfaces IUpperCamelCase Parámetros de tipo TUpperCamelCase
  • Métodos, propiedades y eventos UpperCamelCase Local
  • variables lowerCamelCase Constantes locales lowerCamelCase
  • Parámetros lowerCamelCase Campos (no privados) UpperCamelCase
  • Campos de instancia (privados) _lowerCamelCase
  • Campo estático (privado) _lowerCamelCase
  • Campos constantes (no privados) UpperCamelCase
  • Campos constantes (privados) UpperCamelCase
  • Campos estáticos de solo lectura (no privados) UpperCamelCase
  • Campos de solo lectura estáticos (privados) UpperCamelCase
  • Miembros de Enum UpperCamelCase
  • Todas las demás entidades UpperCamelCase

No subestime el valor de seguir las convenciones de nomenclatura de la plataforma en la que está trabajando lo más cerca posible.

Consulte el material de referencia de .NET Framework para ver ejemplos de cómo “encajar” ( http://msdn.microsoft.com/en-us/library/ms229335.aspx ).

Jon Skeet le ha dado un enlace a un buen artículo escrito por Microsoft: http://msdn.microsoft.com/en-us/library/ms229042.aspx

También puede usar el Microsoft FxCop independiente (o Code Analysis si tiene Team Edition) http://www.microsoft.com/downloads/details.aspx?FamilyID=9aeaa970-f281-4fb0-aba1-d59d7ed09772&DisplayLang=en para verificar que las convenciones de nomenclatura se han seguido. Tiene reglas incorporadas para las convenciones de Microsoft, que es otra razón por la que debería usarlas.

Juval Lowy apuntó que esto es en la progtwigción de los componentes de .NET , vea este enlace SO también.

Echaré un vistazo al delgado libro llamado ” Elements of C # Style ” por Baldwin, Gray y Misfeldt. El libro azul cubre convenciones de nombres y muchos otros aspectos de la creación de código consistente, limpio y legible.