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