2011-05-04 10 views
7

Duplicar posibles:
When do you use the “this” keyword?para usar o no usar el 'esto' calificador en C#

yo sólo han empezado a utilizar ReSharper para analizar el código y hay muchas cosas de TI ha sugerido que lo hago y estoy muy satisfecho con su resultado, ya que también me está enseñando algunos mejores métodos para hacer las cosas.

Obviamente sus sugerencias pueden ser ignoradas y una de ellas me gustaría recibir algunos comentarios de la comunidad.

Siempre he preferido utilizar el calificador 'this' para las propiedades que pertenecen a la clase actual (es decir, this.Name). No hay una razón real, parece que adopté esto hace muchas lunas.

Resharper sugiere que esto es redundante y tal vez debería eliminarlo.

¿Qué opinas?

+1

Definitivamente hay algunos duplicados de eso: http://stackoverflow.com/questions/725770/should-the-java-this-keyword-be-used-when-it-is-optional y http: // stackoverflow .com/questions/3920279/should-i-use-this-keyword-in-oop-programing-where-its-possible-to-skip-it-an – Dyppl

+2

Conoces esos sueños en los que estás en clase o en el trabajo y no llevas ropa? Así es como la propiedad del miembro o el método se refiere sin "esto". Me hace sentir. –

+0

Considerando la analogía, usar ropa en este caso sería un comportamiento neurótico innecesario y en el límite. –

Respuesta

11

Una de las cosas importantes que debe recordar es que this es eliminado por el compilador y por lo tanto, se trata simplemente de "¿qué le parece mejor a usted y a aquellos con quienes comparte el código?". Afectará el rendimiento no un ápice.

+0

Gracias, esa es mi principal preocupación, si mi preferencia por hacer algo está menos optimizada para el rendimiento. – EzaBlade

2

Es técnicamente redundante, pero StyleCop (si está siendo selectivo y usa el conjunto completo de estándares de codificación de Microsoft) dice que debe usarlo.

Sí, muchas personas no, así que supongo que se trata de una preferencia personal o del estándar de codificación de su empleador.

1

En este caso es una preferencia, por lo que prefiere usarlo, dígaselo a resharper y dejará de quejarse.

11

Me resulta redundante en particular con un estándar de codificación bien definido:

Name // Property 
_name // Member field 
name // local variable 

Usando this.<whatever> sólo parece ser más trabajo.

+0

Esto todavía no resuelve la base. funcionalidad de calificador. –

12

Preferiblemente, yo uso this sólo para evitar la ambigüedad entre el (posiblemente) una propiedad y un parámetro de función

public class thing 
{ 

    private string name; 

    public thing(string name) 
    { 
     this.name = name; // will set private string name to param string name 
    } 

} 

si ya está trabajando en el contexto de una determinada clase, no es tan difícil de mantener esta en mente, y no necesito que me recuerden el hecho de que me estoy dirigiendo a una variable local cada vez que me dirijo a una.

Así que creo que el disco tiene razón en este caso.

5

Una ventaja de usar esto. es intellisense Reduce la lista de cosas que puedes elegir más rápido.

+4

puede usar Intellisens presionando CTRL + SPACE sin esto – oleksii

+0

@oleksii: No sabía eso - ¡aprenda algo nuevo todos los días! – n8wrl

+0

en cualquier momento, también hay CTRL + MAYÚS + ESPACIO, no recuerdo cuál es la diferencia – oleksii

6

Personalmente creo que es una buena práctica usar la palabra clave this porque es claramente una marca hace que prorerty/method/etc pertenezca a la instancia del objeto o no. Este es entonces miembros privados especialmente útiles son nombrados de manera que las variables locales son indistinguibles de los miembros privados:

/// some pretty long method 
/// ... 
frameCount += 1; // is it private memeber or some local defined above? 

No hace falta decir que probablemente no es mejor usarlo en absoluto que el uso inconsistenly.

Sin embargo, creo que el uso constante de this hace que el código se vea "ruidoso" con this distractor inútil.OMI es mejor utilizar nombres especial _ prefijo para miembros privados:

/// some pretty long method 
/// ... 
_frameCount += 1; // it's clearly private memeber! 

también es mucho más rápido que escribir.

Cuestiones relacionadas