2009-02-18 19 views
6

me di cuenta de este interesante uso de la palabra "this" mientras se visualiza el código desensamblado de Int32.GetHashCode() en .NET Reflector:¿Se puede usar la palabra clave "this" con los tipos de valor?

public override int GetHashCode() 
{ 
    return this; 
} 

Siempre pensé "esto" sólo se utiliza con no tipos de referencia de valor tipos. En el código anterior, ¿se usará el boxeo cada vez que intentes obtener el código hash de un int?

De la documentación de la palabra "this" en MSDN: - La palabra clave this hace referencia a la instancia actual de la clase

Saludos

Respuesta

12

Sí, this es válido para los tipos de valor. No lleva al boxeo. Si bien hace referencia al tipo de valor, no es una referencia en la misma línea que las referencias de tipo referencia; es una conveniencia de tiempo de compilación/desarrollo en lugar de una referencia de tiempo de ejecución.

Sección 7.5.7 de la Especificación C# afirma:

  • Cuando se utiliza en una primaria-expresión dentro de un constructor de instancias de una estructura, se clasificada como una variable. El tipo de la variable es el tipo de instancia (§10.3.1) de la estructura dentro de la cual se produce el uso , y la variable representa la estructura que está siendo construida. La presente variable de un ejemplo constructor de una estructura se comporta exactamente igual que un parámetro de salida del tipo de estructura particular, esto significa que la variable debe ser definitivamente asignado en cada ruta de ejecución de la ejemplo constructor .

  • Cuando este es utilizado en una primaria-expresión dentro de un método de instancia o instancia de acceso de un struct, se clasifica como una variable . El tipo de la variable es el tipo de instancia (§10.3.1) de la estructura dentro de la cual ocurre el uso.
    • Si el método o de acceso no es un iterador (§10.14), el esta variable representa la estructura para que se invocó el método o de acceso , y se comporta exactamente de la misma como un parámetro ref del tipo de estructura.
    • Si el método o de acceso es un iterador, la Esta variable representa una copia de la struct para que se invocó el método o de acceso, y se comporta exactamente lo mismo que un parámetro de valor de la struct tipo.
+0

Muchas gracias, me encontré con la misma sección después de añadir mi pregunta.Debería haber verificado la especificación antes de hacer la pregunta. –

+0

No hay problema, todo parece fácil una vez que lo sabes. :) –

Cuestiones relacionadas