2010-06-30 19 views
14

Sono curioso di sapere come dovrebbe apparire il "metodo body" per typeof in C# (è quasi certo che non riesco ad ottenerlo nel reflector poiché è una parola chiave non un metodo).Come funziona "typeof"?

Suppongo che sia equivalente a GetType (simbolo di conversione magica in stringa).

Guardando GetType (stringa) in Reflector si chiama un metodo "PrivateGetType", che chiama "RuntimeTypeHandle.GetTypeByName", e RuntimeTypeHandle sembra avere un sacco di logica dietro i tipi in esso, ma la roba GetTypeByName non lo fa comparire in Reflector.

risposta

13

Se si fa qualcosa di simile:

Type t = typeof(string); 

Poi il compilatore compila il typeof(string) bit per un'istruzione ldtoken MSIL e quindi chiama Type.GetTypeFromHandle per ottenere un'istanza della classe Type.

Type.GetTypeFromHandle viene implementato dal runtime (motivo per cui è contrassegnato con l'attributo "MethodImplOptions.InternalCall"). Puoi guardare il codice sorgente in mono per come è effettivamente implementato, ma fondamentalmente devi capire l'intero sistema di metadati per capire come Type e gli amici lavorano internamente ...

+0

Grazie questo è perfetto. Come hai detto, anche GetTypeFromHandle è extern, ma stavo considerando di guardare mono per questo genere di cose, quindi potrebbe valere la pena investire nel tempo. –

Problemi correlati