¿Cuándo utiliza la palabra clave "esta"? [cerrado]

Resuelto ftdysa asked hace 16 años • 31 respuestas

Tenía curiosidad sobre cómo otras personas usan esta palabra clave. Tiendo a usarlo en constructores, pero también puedo usarlo en toda la clase en otros métodos. Algunos ejemplos:

En un constructor:

public Light(Vector v)
{
    this.dir = new Vector(v);
}

En otra parte

public void SomeMethod()
{
    Vector vec = new Vector();
    double d = (vec * vec) - (this.radius * this.radius);
}
ftdysa avatar Aug 23 '08 02:08 ftdysa
Aceptado

No quiero que esto suene sarcástico, pero no importa.

En serio.

Mira las cosas que son importantes: tu proyecto, tu código, tu trabajo, tu vida personal. El éxito de ninguno de ellos dependerá de si utiliza o no la palabra clave "esta" para calificar el acceso a los campos. Esta palabra clave no le ayudará a realizar el envío a tiempo. No reducirá los errores, no tendrá ningún efecto apreciable en la calidad o la capacidad de mantenimiento del código. No le dará un aumento ni le permitirá pasar menos tiempo en la oficina.

En realidad es sólo una cuestión de estilo. Si te gusta "esto", úsalo. Si no lo haces, entonces no lo hagas. Si lo necesita para obtener la semántica correcta, úselo. La verdad es que cada programador tiene su propio estilo de programación único. Ese estilo refleja las nociones de ese programador en particular sobre cómo debería verse el "código más agradable desde el punto de vista estético". Por definición, cualquier otro programador que lea su código tendrá un estilo de programación diferente. Eso significa que siempre habrá algo que hiciste que al otro no le guste o que hubiera hecho de otra manera. En algún momento, algún tipo leerá tu código y se quejará de algo.

No me preocuparía por eso. Solo me aseguraría de que el código sea lo más agradable posible desde el punto de vista estético según sus propios gustos. Si preguntas a 10 programadores cómo formatear el código, obtendrás unas 15 opiniones diferentes. Es mejor centrarse en cómo se factoriza el código. ¿Están bien las cosas abstractas? ¿Elegí nombres significativos para las cosas? ¿Hay mucha duplicación de código? ¿Hay formas de simplificar las cosas? Creo que hacer esas cosas bien tendrá el mayor impacto positivo en su proyecto, su código, su trabajo y su vida. Casualmente, probablemente también hará que el otro tipo sea el que menos se queje. Si su código funciona, es fácil de leer y está bien factorizado, el otro tipo no examinará cómo inicializa los campos. Simplemente usará su código, se maravillará de su grandeza y luego pasará a otra cosa.

Scott Wisniewski avatar Aug 22 '2008 20:08 Scott Wisniewski

Hay varios usos de esta palabra clave en C#.

  1. Para calificar a miembros ocultos por nombre similar
  2. Para que un objeto se pase a sí mismo como parámetro a otros métodos
  3. Para que un objeto regrese a sí mismo desde un método
  4. Para declarar indexadores
  5. Para declarar métodos de extensión
  6. Para pasar parámetros entre constructores
  7. Para reasignar internamente el tipo de valor (struct) value .
  8. Para invocar un método de extensión en la instancia actual
  9. Lanzarse a otro tipo
  10. Para encadenar constructores definidos en la misma clase

Puede evitar el primer uso al no tener variables miembro y locales con el mismo nombre en el alcance, por ejemplo, siguiendo convenciones de nomenclatura comunes y usando propiedades (caso Pascal) en lugar de campos (caso camello) para evitar colisionar con variables locales (también camello). caso). En C# 3.0, los campos se pueden convertir en propiedades fácilmente mediante el uso de propiedades implementadas automáticamente .

Jakub Šturc avatar Aug 22 '2008 21:08 Jakub Šturc

Sólo lo uso cuando es absolutamente necesario, es decir, cuando otra variable sigue a otra. Como aquí:

class Vector3
{
    float x;
    float y;
    float z;

    public Vector3(float x, float y, float z)
    {
        this.x = x;
        this.y = y;
        this.z = z;
    }

}

O como señala Ryan Fox, cuando necesitas pasar esto como parámetro. (Las variables locales tienen prioridad sobre las variables miembro)

Corey avatar Aug 22 '2008 19:08 Corey