generate - params comments c#
Convención de nomenclatura para campos privados. (4)
Primero, sé que esta pregunta se ha hecho varias veces antes y que al final, es principalmente una cuestión de preferencia personal, pero al leer todos los hilos sobre el tema, algunas cosas no están claras para mí.
Básicamente, algo con lo que la mayoría de la gente está de acuerdo, al menos, es que el miembro público debe ser PascalCased, mientras que los miembros privados deben ser más bajos.
El asunto que generalmente trae el debate es si prefijar o no a los miembros privados por un guión bajo, o cualquier otra cosa. El prefijo viola varias reglas de StyleCop (que obviamente pueden desactivarse)
La razón para no hacer prefijos es que debes usar esto. prefijo en su lugar.
¿El problema que tengo es que no entiendo cómo está marcando la diferencia? Quiero decir, no es que no puedas usar esto en un miembro público de todas formas dentro de una clase.
Imaginemos un cliente de clase, con este aspecto:
class Customer
{
private int age;
public int Age
{
get { return this.age; }
set { this.age = value; }
}
}
(Obviamente, en un caso tan simple, podría usar una propiedad automática, pero eso es solo un ejemplo).
Si agrego una segunda propiedad dentro de esta clase, nada me impediría referirme a ella usando this.Age (la propiedad pública) en lugar de this.age (el campo privado). A veces, incluso podría ser deseable, si se aplicara alguna validación o formato en el nivel getter.
Además, si algunas otras propiedades de mi clase necesitaban modificar la antigüedad del cliente, tendría sentido utilizar la propiedad en lugar del campo de respaldo directamente, ya que el establecedor también podría implementar algunas validaciones de reglas de negocios, ¿verdad?
En otras palabras, realmente no veo cómo esta palabra clave evita la confusión entre los miembros de respaldo privado y las propiedades públicas, ya que esto se puede usar en ambos, e IntelliSense muestra ambos.
Gracias.
El prefijo de campos privados con subrayado es básicamente lo mismo que usar "esto". Sin embargo, el subrayado es más rápido de usar, más corto y más elegante para mí (creo que esto proviene de Java).
Tener los mismos nombres para parámetros de función y campos privados me parece un poco complicado. No solo una vez olvidé usar "this" que resultó en la desagradable NullPointerException (sí, hice Java algún día ... :)).
Que yo sepa, no viola ninguna regla de FxCop, ya que no es una notación húngara.
Estás en lo cierto. No lo hace
El uso de this
es una forma de asegurarse de que está usando el miembro de la clase, en caso de conflictos de nombres (diga un nombre de parámetro que sea idéntico al nombre de un campo).
Para mí, los miembros públicos de cascos de pascal y los miembros privados de casquillos de camellos siempre han sido una convención suficiente para funcionar bien.
Prefiero la convención de "_" para los campos privados, aunque no sigue las convenciones de MS:
Elimina los conflictos con los nombres de los parámetros en caja de camello, sin necesidad de usar "esto"
Es un indicador visual de que el estado interno persistente del objeto se está leyendo o, lo que es más importante, se está escribiendo. Es una bandera que dice "esto tiene efectos secundarios fuera del método particular que estoy viendo" , lo cual es muy importante saber cuando se busca un código desconocido.
Usar this.age
podría ayudar a distinguir entre el almacén de respaldo de su propiedad Age
y un parámetro age
para un método en su objeto:
public bool CheckIfOlderThan(int age)
{
// in here, just using "age" isn''t clear - is it the method parameter?
// The internal field?? Using this.age make that clear!
return (this.age >= age);
}
Por supuesto, en este caso, también podría darle a su parámetro un nombre menos confuso para evitar cualquier conflicto ...
Pero en la definición real de la propiedad, leer y almacenar su valor en la tienda de respaldo, agregar this.
Realmente no agrega nada. Algunas personas que conozco prefieren usar this.
prefijo todo el tiempo, no solo cuando se necesita, preferencia personal, realmente ...