2009-02-18 10 views
6

ho notato questo uso interessante del "questo" parola chiave durante la visualizzazione del codice disassemblato di Int32.GetHashCode() in .NET Reflector:La parola chiave "this" può essere utilizzata con i tipi di valore?

public override int GetHashCode() 
{ 
    return this; 
} 

Ho sempre pensato che "questo" è usato solo con non tipi di riferimento di valore tipi. Nel codice sopra, la boxe sarà usata ogni volta che proverai ad ottenere il codice hash di un int?

Dalla documentazione del "questo" parola chiave in MSDN: - La parola chiave this si riferisce all'istanza corrente della classe

saluti

risposta

12

Sì, this vale per i tipi di valore. Non porta alla boxe. Mentre fa riferimento al tipo di valore, non si tratta di un riferimento nello stesso senso dei riferimenti di tipo di riferimento: è una convenienza del tempo di compilazione/sviluppo piuttosto che un riferimento di runtime.

sezione 7.5.7 del C# Specification afferma:

  • Quando questo viene utilizzato in un primaria espressione all'interno di un'istanza costruttore di una struct, si classificato come una variabile. Il tipo di variabile è il tipo di istanza (§10.3.1) della struttura all'interno della quale si verifica l'utilizzo di e la variabile rappresenta la struttura costruita. Il questa variabile di un un'istanza costruttore di una struct si comporta esattamente come un fuori parametro del tipo in particolare struct, ciò significa che la variabile deve essere definitivamente assegnato in ogni percorso di esecuzione del costruttore istanza .

  • Quando questo è utilizzato in un primario espressione all'interno di un metodo di istanza o un'istanza di accesso di una struttura, viene classificato come una variabile . Il tipo della variabile è il tipo di istanza (§10.3.1) della struttura all'interno della quale si verifica l'utilizzo.
    • Se il metodo o di accesso non è un iteratore (§10.14), il questa variabile rappresenta la struct per cui è stato richiamato il metodo o di accesso, e si comporta esattamente come un parametro ref del tipo struct.
    • Se il metodo o di accesso è un iteratore, il questa variabile rappresenta una copia del struct per cui è stato richiamato il metodo o di accesso, e si comporta esattamente lo stesso come parametro valore della struct genere.
+0

Grazie mille, mi sono imbattuto la stessa sezione dopo aver aggiunto alla mia domanda.Avrei dovuto controllare le specifiche prima di porre la domanda. –

+0

Nessun problema: tutto sembra facile una volta che lo conosci. :) –

Problemi correlati