2010-06-30 13 views
14

Tengo curiosidad por lo que sería el "cuerpo del método" para typeof en C# (estoy bastante seguro de que no puedo acceder a él en el reflector ya que es una palabra clave, no un método).¿Cómo funciona 'typeof'?

Supongo que es equivalente a GetType (símbolo de conversión mágica a la cadena).

Al mirar GetType (cadena) en Reflector llama a un método "PrivateGetType", que llama "RuntimeTypeHandle.GetTypeByName", y RuntimeTypeHandle parece tener mucha lógica detrás de los tipos, pero GetTypeByName no lo hace aparecer en Reflector.

Respuesta

13

Si haces algo como:

Type t = typeof(string); 

A continuación, el compilador compila el bit typeof(string) a una instrucción ldtoken MSIL y luego llama Type.GetTypeFromHandle para obtener una instancia de la clase Type.

Type.GetTypeFromHandle es implementado por el tiempo de ejecución (por lo que está marcado con el atributo "MethodImplOptions.InternalCall"). Puede ver el código fuente en mono para ver cómo está realmente implementado, pero básicamente tiene que entender todo el sistema de metadatos para entender cómo funciona internamente Type y amigos ...

+0

Gracias esto es perfecto. Como dijiste GetTypeFromHandle también es externo, pero estaba considerando buscar mono para este tipo de cosas, así que podría valer la pena el tiempo de inversión. –

Cuestiones relacionadas