Как работает атрибут MethodImplAttribute в .NET?
-
06-07-2019 - |
Вопрос
Я исследовал некоторый код фреймворка (метод System.AppDomain.GetDynamicDir), и это было все, что показал ассемблер:
[MethodImpl(MethodImplOptions.InternalCall)]
private extern string GetDynamicDir();
Что происходит при вызове этого метода?Я имею в виду не этот конкретный метод, а методы с этим атрибутом в целом.
Решение
Из MSDN :
MethodImplOptions.InternalCall : указывает внутренний вызов. Внутренний звонок - это звонок метод, который реализуется в рамках общеязыковая среда выполнения.
Таким образом, в основном, CLR предоставляет собственную реализацию этого метода (что, вероятно, в собственном коде), поэтому вы не можете увидеть его в дизассемблере.
Другие советы
Ответ здесь :
(...)
MethodImplOptions.InternalCall
используется в сочетании с extern, чтобы сообщить среде выполнения, что метод реализован внутри самой системы.Это сделано для многих основных методов .NET Framework, которые лучше обслуживаются благодаря реализации в неуправляемом коде.Например, многие из методов, описанных вString
,GC
, и Классы математики помечены какInternalCall
.Как вы уже заметили,Guid.CompleteGuid
также являетсяInternalCall
.