MethodImplAttribute如何在.NET中运行?

Mic*_*out 7 .net attributes disassembly

我正在调查一些框架代码(System.AppDomain.GetDynamicDir方法),这是所有汇编程序显示的:

[MethodImpl(MethodImplOptions.InternalCall)]
private extern string GetDynamicDir();
Run Code Online (Sandbox Code Playgroud)

调用此方法会发生什么?我不是指这个特定的方法,而是具有此属性的方法.

Avi*_*ish 10

来自MSDN:

MethodImplOptions.InternalCall:指定内部调用.内部调用是对在公共语言运行时本身内实现的方法的调用.

所以基本上,CLR提供了自己的这个方法的实现(可能是本机代码),这就是你在反汇编程序中看不到它的原因.


Syl*_*gue 6

在这里回答:

(...) MethodImplOptions.InternalCall与extern一起使用,告诉运行时该方法是在系统内部实现的.这是通过在非托管代码中实现更好地服务的许多核心.NET Framework方法完成的.例如,许多对方法String,GC和Math类被标记为 InternalCall.正如你所注意到的, Guid.CompleteGuid也是一个 InternalCall.