Как работает метод MethodImplAttribute в .NET? - PullRequest
7 голосов
/ 18 июня 2009

Я исследовал какой-то каркасный код (метод System.AppDomain.GetDynamicDir), и это все, что показал ассемблер:

[MethodImpl(MethodImplOptions.InternalCall)]
private extern string GetDynamicDir();

Что происходит, когда вызывается этот метод? Я имею в виду не этот конкретный метод, а методы с этим атрибутом в целом.

Ответы [ 2 ]

10 голосов
/ 18 июня 2009

С MSDN :

MethodImplOptions.InternalCall : указывает внутренний вызов. Внутренний звонок - это звонок метод, который реализуется в рамках общеязыковая среда выполнения.

Таким образом, в основном, CLR предоставляет собственную реализацию этого метода (что, вероятно, в собственном коде), поэтому вы не можете увидеть его в дизассемблере.

6 голосов
/ 18 июня 2009

Ответ здесь :

(...) MethodImplOptions.InternalCall используется в сочетании с Extern, чтобы сказать время выполнения, что метод реализован внутренне в самой системе. Это сделано для многих основных .NET Рамочные методы, которые лучше обслуживается, будучи реализованным в неуправляемый код. Например, многие из методы на String, GC и Классы математики отмечены как InternalCall. Как вы заметили, Guid.CompleteGuid также InternalCall.

...