2010-06-30 3 views
14

Je suis curieux de savoir à quoi ressemblerait le "corps de la méthode" pour typeof en C# (à peu près sûr que je ne peux pas y accéder dans le réflecteur car c'est un mot-clé et non une méthode).Comment 'typeof' fonctionne-t-il?

Je suppose qu'il est équivalent à GetType (magic convert symbol to string). En regardant GetType (chaîne) dans Reflector, il appelle une méthode "PrivateGetType", qui appelle "RuntimeTypeHandle.GetTypeByName", et RuntimeTypeHandle semble avoir beaucoup de logique derrière les types, mais le truc GetTypeByName ne apparaître dans le réflecteur.

Répondre

13

Si vous faites quelque chose comme:

Type t = typeof(string); 

le compilateur compile le bit typeof(string) à une instruction MSIL ldtoken puis appelle Type.GetTypeFromHandle pour obtenir une instance de la classe Type.

Type.GetTypeFromHandle est implémenté par le moteur d'exécution (c'est pourquoi il est marqué avec l'attribut "MethodImplOptions.InternalCall"). Vous pouvez regarder le code source en mono pour savoir comment il est réellement implémenté, mais vous devez essentiellement comprendre le système de métadonnées pour comprendre comment fonctionne Type et vos amis en interne ...

+0

Merci pour votre commentaire. Comme vous l'avez dit, GetTypeFromHandle est extern aussi, mais je pensais regarder mono pour ce genre de chose anwyay alors ça vaut le temps d'investir. –

Questions connexes