Come funziona MethodImplAttribute in .NET?
-
06-07-2019 - |
Domanda
Stavo studiando del codice del framework (il metodo System.AppDomain.GetDynamicDir) e questo era tutto ciò che l'assemblatore mostrava:
[MethodImpl(MethodImplOptions.InternalCall)]
private extern string GetDynamicDir();
Cosa succede quando viene chiamato questo metodo? Non intendo questo metodo specifico, ma metodi con questo attributo in generale.
Soluzione
Da MSDN :
MethodImplOptions.InternalCall : specifica un interno chiamata. Una chiamata interna è una chiamata a metodo implementato all'interno di Common Language Runtime stesso.
Quindi, in sostanza, il CLR fornisce la propria implementazione di questo metodo (che è probabilmente nel codice nativo), motivo per cui non è possibile vederlo nel disassemblatore.
Altri suggerimenti
Rispondi qui :
(...) Viene usato
MethodImplOptions.InternalCall
in collaborazione con extern per dire al runtime che il metodo è implementato internamente al sistema stesso. Questo viene fatto per molti dei core .NET Metodi quadro che sono migliori servito da implementato in codice non gestito. Ad esempio, molti di i metodi suString
,GC
e Le lezioni di matematica sono contrassegnate comeinternalcall
. Come hai notato, AncheGuid.CompleteGuid
è uninternalcall
.