我正在研究一些框架代码(System.AppDomain.GetDynamicDir 方法),这就是汇编程序显示的全部内容:
[MethodImpl(MethodImplOptions.InternalCall)]
private extern string GetDynamicDir();
调用此方法时会发生什么?我不是指这个特定的方法,而是具有这个属性的一般方法。
我正在研究一些框架代码(System.AppDomain.GetDynamicDir 方法),这就是汇编程序显示的全部内容:
[MethodImpl(MethodImplOptions.InternalCall)]
private extern string GetDynamicDir();
调用此方法时会发生什么?我不是指这个特定的方法,而是具有这个属性的一般方法。
来自MSDN:
MethodImplOptions.InternalCall:指定内部调用。内部调用是对在公共语言运行时本身内实现的方法的调用。
所以基本上,CLR 提供了它自己的这个方法的实现(可能在本机代码中),这就是为什么你在反汇编器中看不到它的原因。
在这里回答:
(...)
MethodImplOptions.InternalCall
与 extern 一起使用来告诉运行时该方法是在系统本身内部实现的。这是为许多核心 .NET Framework 方法完成的,这些方法通过在非托管代码中实现更好。例如, 、 和 Math 类上的许多方法String
都GC
标记为InternalCall
。正如您所注意到的,Guid.CompleteGuid
它也是一个InternalCall
.