Como funciona o MethodImplAttribute em .NET?
-
06-07-2019 - |
Pergunta
Eu estava investigando alguns código do framework (o método System.AppDomain.GetDynamicDir) e isso era tudo o montador mostrou:
[MethodImpl(MethodImplOptions.InternalCall)]
private extern string GetDynamicDir();
O que acontece quando este método é chamado? Não me refiro a este método específico, mas os métodos com esse atributo em geral.
Solução
A partir MSDN :
MethodImplOptions.InternalCall : Especifica um interno ligar. Uma chamada interna é uma chamada para um método que é implementado dentro do própria linguagem tempo de execução comum.
Então, basicamente, o CLR fornece sua própria implementação deste método (que é provavelmente em código nativo), razão pela qual você não pode vê-lo no desmontador.
Outras dicas
aqui :
(...)
MethodImplOptions.InternalCall
é usado em conjunto com extern para contar a tempo de execução que o método é implementado internamente dentro do próprio sistema. Isso é feito por muitos do núcleo .NET métodos de enquadramento que são melhores servido por ser implementado em código não gerenciado. Por exemplo, muitos dos os métodos noString
,GC
, e aulas de matemática são marcados comoInternalCall
. Como você percebeu,Guid.CompleteGuid
é também umInternalCall
.