Il puntatore dell'oggetto tipo viene utilizzato per rappresentare il tipo dell'oggetto. Questo è necessario per:
- metodo di ricerca (vtable)
- Controllo getta
- Trovare l'oggetto
Type
se si chiama GetType
.
Il campo syncblock viene utilizzato principalmente per il blocco. Viene compilato solo quando è necessario, e quando un blocco è sempre incontestato, il CLR agisce con un blocco "sottile" che non richiede dati esterni. Altrimenti, è una voce in una tabella a livello di processo - Non conosco i dettagli di ciò che è nella tabella, ma immagino che sia una lista di thread in attesa sul monitor dell'oggetto. Ovviamente il bit più importante di informazione è se il blocco è attualmente in attesa, da quale thread e quale è il suo conteggio (a causa della natura di rientro dei blocchi .NET).
Il syncblock viene compilato anche se si chiama GetHashCode()
e non è sovrascritto, ma utilizza la tabella del processo per allocare un numero stabile, in pratica. (L'indirizzo dell'oggetto non è abbastanza buono in quanto può cambiare nel tempo.)
fonte
2009-10-27 07:04:58
Dato che tutti gli oggetti sono di un tipo specifico, howelse è il runtime dovuto sapere a meno che non registri il tipo da qualche parte ...? Non preoccuparti di leggere quel tipo di cose, preoccupati del tuo codice. –
@mP Esattamente - quindi perché non registra tali informazioni per i tipi di valore? Vale sempre la pena sapere come funzionano i tuoi strumenti. – TarkaDaal