Comment fonctionne MethodImplAttribute dans .NET?
-
06-07-2019 - |
Question
J'enquêtais sur un code d'infrastructure (la méthode System.AppDomain.GetDynamicDir) et c'était tout ce que l'assembleur a montré:
[MethodImpl(MethodImplOptions.InternalCall)]
private extern string GetDynamicDir();
Que se passe-t-il lorsque cette méthode est appelée? Je ne parle pas de cette méthode spécifique, mais des méthodes avec cet attribut en général.
La solution
De MSDN :
MethodImplOptions.InternalCall : spécifie un paramètre interne. appel. Un appel interne est un appel à un méthode qui est mise en œuvre dans le Common Language Runtime lui-même.
En gros, le CLR fournit sa propre implémentation de cette méthode (qui est probablement en code natif), raison pour laquelle vous ne pouvez pas la voir dans le désassembleur.
Autres conseils
Répondez à ici :
(...)
MethodImplOptions.InternalCall
est utilisé en conjonction avec extern pour dire la runtime que la méthode est implémentée en interne au sein du système lui-même. Ceci est fait pour bon nombre des principaux .NET Des méthodes de cadre qui sont meilleures servi par être mis en œuvre dans code non géré. Par exemple, beaucoup de les méthodes de lachaîne
,GC
, et Les cours de mathématiques sont marqués commeAppel interne
. Comme vous l'avez remarqué,Guid.CompleteGuid
est également unAppel interne
.