¿Cómo nombras tus variables privadas en C #? [cerrado]

25

¿Cuál es la mejor práctica, las convenciones de nomenclatura más comúnmente aceptadas para variables privadas en C #?

  1. private int myInteger;
  2. private int MyInteger;
  3. private int mMyInteger;
  4. private int _myInteger;
  5. private int _MyInteger;
  6. 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).

Vaccano
fuente
¿Por qué no utilizar las propiedades implementadas automáticamente? msdn.microsoft.com/en-us/library/bb384054.aspx
Kyle Ballard
1
C # tiene estándares para esto, consulte stackoverflow.com/questions/14967/…
Tamara Wijsman
77
No es bueno hablar de variables privadas en público. Lo siento, solo tenía que hacerlo.
Mark C
Uso lo mismo que azheglov (m_someVariable) con la excepción de que solo uso _someVariable dentro del ámbito local para un método.
lord-fu el
77
@ Mark Creo que deberían ser "miembros privados" para que eso sea sugerente.
EpsilonVector 01 de

Respuestas:

44

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 _.

btlog
fuente
1
No me ha gustado el carácter _ hasta que resharper agregó una coincidencia de cadena media a la inteligencia. Ahora puedo escribir myIntegery coincidirá _myInteger. Pero no sabía que MSDS dice que no use el _
Vaccano
44
Si usa la opción 1, ¿cómo puedo saber si myIntegeres una variable local de un método o un miembro de la clase privada?
Wizard79
44
@Lorenzo this.myInteger;)
TWith2Sugars
12
Pero pero ... "esto" tiene 4 caracteres y "_" es solo uno. En realidad, esa directriz tiene mucho sentido, pero en mi oficina a todos les encanta subrayar y odian ver "this.Foo", por cualquier razón. A veces, las únicas pautas que importan son las que su lugar de trabajo le impone.
CodexArcanum
2
La discusión sobre el número de personajes es discutible. No tiene que escribir thistodo 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.
Malcolm
25

Yo uso la opción # 4 arriba:

private int _myInteger;

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.

Matt Dillard
fuente
55
No estoy de acuerdo con que sea fácil de leer, especialmente si tiene que operar con varias variables.
Restuta
15

Yo uso el siguiente esquema de nombres:

  • 1er (myInteger) para variables de ámbito local
  • 2do (MyInteger) para propiedades públicas
  • 4to (_myInteger) para variables privadas
Zafer
fuente
14

Creo que la opción 4 es realmente la opción más legible. Le ayuda a tener que hacer esto:

public Person(string name, int age) 
{
    this.name = name;
    this.age = age;
}

También hace que todos los miembros privados sean más notorios. En el siguiente ejemplo, ¿de dónde ageviene el demonio ? Sin el thiscalificador es más difícil saberlo.

private void Method()
{
    var x = 2;
    var y = age + x;
}

Esto es mucho más fácil de entender:

private void Method()
{
    var x = 2;
    var y = _age + x;
}
ChaosPandion
fuente
1
Solía ​​jurar tu primer ejemplo, pero después de probar la opción n. ° 4 por un tiempo, prefiero usar guiones bajos como prefijo para campos privados.
Jeremy Wiebe
2
Digo, use 1 para variables privadas, use 4 para variables privadas usadas en propiedades.
Evan Plaice
2
Tengo que estar en desacuerdo con ChaosPandoin. Para mí, ambas implementaciones de Method () son fáciles de leer. Tan pronto como veo la variable age (o _age) y noto que no está declarada en el método, me doy cuenta de que debe declararse en otra parte de la clase. El calificador this es horrible, pero al menos se limita al método del constructor.
David Kennedy
10

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.

Estafado
fuente
2
No entiendo por qué usarías _camelCasing para las variables de clase, ya que generalmente es obvio que son variables de clase.
Alternativa
1
@math no, no es obvio en el intellisense. Recuerde, los campos (variables de ámbito de clase) tienen (casi) el mismo icono que las variables de ámbito de método, por lo que se ven exactamente iguales si no se observa de cerca. El guión bajo ayuda a diferenciarlos visualmente y los mantiene agrupados, lo que ayuda si no los usa con frecuencia (lo que no debería ser porque el estado es el enemigo de la programación libre de errores).
Estafado el
Nunca dije nada sobre el Intellisense. Estoy hablando de la diferencia entre Color.ClassMethod () y myColor.InstanceMethod (), es decir, que debería ser obvio que dado que Color es una clase, ClassMethod () es un método de clase.
alternativa
@math you before: 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.
Estafado el
2
@mathepic: cuando Will dice "variables de clase" se refiere a campos de instancia (privados). Parece que has interpretado lo que dijo que significa miembros estáticos; Pero eso no fue lo que dijo.
Dan Tao
4

private int integer

Si se confunde entre las variables miembro y locales en el alcance de un método, probablemente necesite refactorizar.

Ryan Roberts
fuente
+1: eso es lo que creo que es el punto. Por cierto: veo su origen, pero el nombre integerpodría ser mejor redactado, value¿ tal vez ?
Wolf
2

Creo que la mejor manera de hacerlo (en C # /. Net de todos modos) es una combinación de 2 y 6:

private int MyInteger { get; set; }

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!

Tarea
fuente
2

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

Conrad Frix
fuente
2

¡No lo llamaría "mi" nada!

Pero yo diría

class C
{
     int VariableName { get; set; }
}

bastante a menudo esto es mejor que tener variables explícitas. Si tuviera una variable privada explícita la llamaríaint _variableName;

CJBrew
fuente
1

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.

Tamara Wijsman
fuente
1

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.

Victor Hurdugaci
fuente
1

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.

Caspar Kleijne
fuente
1
Sí, aunque fue un ejemplo.
Vaccano
1

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.

Trabajo
fuente
0

Voy por la opción 5: private int _MyFoo

Sin embargo, no veo ninguna ventaja competitiva real sobre _myFoo.

mafu
fuente
0

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 _myPropertypara la propiedadMyProperty

Gulshan
fuente
0

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.

Sevki
fuente
0

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.

private int m_myInteger;

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 con this, lo que me parece redundante.

azheglov
fuente