¿Cuál es la mejor práctica, las convenciones de nomenclatura más comúnmente aceptadas para variables privadas en C #?
private int myInteger;
private int MyInteger;
private int mMyInteger;
private int _myInteger;
private int _MyInteger;
- Otra opción misteriosa
¿Cuál usas y por qué? (Mi empresa es bastante nueva en C # y me gustaría elegir el método más "aceptado por la industria" para intentar entrar en nuestro estándar de codificación).
coding-standards
variables
naming
Vaccano
fuente
fuente
Respuestas:
Las pautas de diseño de la clase MSDN http://msdn.microsoft.com/en-us/library/ta31s3bc.aspx recomiendan la opción 1: myInteger.
Siempre he usado este estilo. Tengo una aversión personal por el personaje _.
fuente
myInteger
y coincidirá_myInteger
. Pero no sabía que MSDS dice que no use el _myInteger
es una variable local de un método o un miembro de la clase privada?this.myInteger
;)this
todo el tiempo, solo en los métodos donde está presente una variable local con el mismo nombre. Sin embargo, debe escribir un símbolo adicional cada vez que use un guión bajo. Con lo que estoy de acuerdo es que cumplir con su acuerdo de estilo de código local siempre es importante.Yo uso la opción # 4 arriba:
Me gusta tener alguna indicación de alcance en mis nombres de variables, y el guión bajo es suficiente para ese propósito. También es bastante fácil de leer.
fuente
Yo uso el siguiente esquema de nombres:
fuente
Creo que la opción 4 es realmente la opción más legible. Le ayuda a tener que hacer esto:
También hace que todos los miembros privados sean más notorios. En el siguiente ejemplo, ¿de dónde
age
viene el demonio ? Sin elthis
calificador es más difícil saberlo.Esto es mucho más fácil de entender:
fuente
En primer lugar, PascalCasing se reserva comúnmente para propiedades públicas, concursos, métodos, etc. de la clase. Entonces me saltaría 2 y 5.
En segundo lugar, se desaconseja la notación húngara en el mundo .NET, así que (creo que) 3 está listo. Asumiendo que eso es lo que está pasando con 3.
Eso se va con camelCasing y _camelCasing. Por lo general, uso _camelCasing para las variables de clase, y el viejo camelCasing para las variables con un alcance o un método más estrecho. La carcasa de camello es el estándar aceptado utilizado para argumentos de métodos, nombres de variables protegidas / privadas y variables dentro de un método o alcance más limitado.
También me gusta anteponer el guión bajo para que mis variables privadas se agrupen en mi inteligencia. Sin embargo, solo hago esto para las variables con alcance a un tipo. Variables declaradas dentro de un método o alcance más estrecho Dejo el subrayado desactivado. Facilita mantenerlos separados y mantener juntas las variables menos utilizadas.
fuente
I don't understand why you would use _camelCasing for class variables
you after:I'm talking about the difference between Color.ClassMethod() and myColor.InstanceMethod()
Disculpe mientras estoy confundido. Escucha, utilizo variables de clase raramente, por lo que es bueno recordar sus nombres presionando _ y hacer que aparezcan todos en el intellisense agradable y agrupado.private int integer
Si se confunde entre las variables miembro y locales en el alcance de un método, probablemente necesite refactorizar.
fuente
integer
podría ser mejor redactado,value
¿ tal vez ?Creo que la mejor manera de hacerlo (en C # /. Net de todos modos) es una combinación de 2 y 6:
Teóricamente no hay ninguna variable aquí, pero se ve y actúa como una variable de instancia privada. Si necesitamos agregar algo de lógica de negocios a ese valor (es un valor completamente interno, por lo que podemos hacer lo que queramos después de todo), entonces ya está 'propiedad' para nosotros. ¡Una taza de victoria humeante!
fuente
Hago la opción # 4 porque así es como se ve el SSCLI, pero honestamente no me importa mucho nombrar variables privadas. Público es una historia diferente.
Por cierto, olvidaste m_MyInteger
fuente
¡No lo llamaría "mi" nada!
Pero yo diría
bastante a menudo esto es mejor que tener variables explícitas. Si tuviera una variable privada explícita la llamaría
int _variableName;
fuente
En C ++ tiendo a usar _ ya que cambio mucho los editores, lo que no me permite ver si es privado.
Para C #, tiendo a dejar el _ ausente ya que Visual Studio me permite ver si es privado.
Tiendo a usar la forma Camel Case para hacer esto.
fuente
Yo uso 4 (
private int _myInteger;
) porque:private int myInteger;
Así es como nombro mis variables locales.
private int MyInteger;
Así es como yo llamo constantes.
private int mMyInteger;
Este no es el estilo C #.
private int _MyInteger;
Esto se ve extraño.
fuente
con el guion bajo
Bill Wagner explica por qué en Effective C # . Pero nunca nombraría un entero mi Entero , mejor algo como _age o _length. Incluir el TypeName en el nombre de la instancia es una práctica horrible. Los nombres deben explicarse por sí mismos y dado que C # es Type-Safe, los tipos se pueden encontrar en todo momento.
fuente
Debe dar un ejemplo más específico, pero:
private int count
`private int badFileCount
`private static readonly int ReconnectAttemptsLimit
Por cierto, obtienes todo esto GRATIS cuando instalas y comienzas a usar lo último y mejor
MSFT Stylecop
.fuente
Voy por la opción 5:
private int _MyFoo
Sin embargo, no veo ninguna ventaja competitiva real sobre _myFoo.
fuente
Use camelCasing para variables privadas como
myInteger
Considere un precedente
_
si la variable es una copia de seguridad de una propiedad para reducir las confusiones -Variable
_myProperty
para la propiedadMyProperty
fuente
ReSharper nombra mis variables, no solo las mías, sino que todos los demás también lo hacen. Hay una gran cantidad de consistencia a través del proyecto.
fuente
El estándar de codificación IDesign C # de Juval Lowy es bastante popular. Este estándar recomienda prefijar las variables de miembros privados con "m_" (Opción 6). Eso es lo que hacemos en nuestro equipo.
La opción 4 (
_myInteger
) es una variación aceptable de esta norma.No me gustó la recomendación de MSDN (
myInteger
), porque hace que sea difícil distinguir a un miembro privado de una variable local. Su recomendación, por supuesto, resuelve este problema al calificar a los miembros privados conthis
, lo que me parece redundante.fuente