哪些 CallingConventions 与 Reflection.Emit 一起使用?

Which CallingConventions to use with Reflection.Emit?

这里的介绍性指南说您可以使用 CallingConventions.Standard 基本上任何东西:https://www.codeproject.com/Articles/13337/Introduction-to-Creating-Dynamic-Types-with-Reflec

另一方面,MSDN 为 CallingConventions.Standard 声明了这一点:

Specifies the default calling convention as determined by the common language runtime. Use this calling convention for static methods. For instance or virtual methods use HasThis.

https://msdn.microsoft.com/en-us/library/system.reflection.callingconventions

所以,我想我应该听取 MSDN 的意见,并且只对静态方法使用 Standard。但是它为什么适用于实例方法呢?有什么区别?

编辑:

这里有一些来自实验的更多信息:

所以结论是我应该始终使用 Standard 吗?老实说,仍然看不出有什么区别,因为这两种方法都有效。

定义静态方法时使用标准。

使用标准 |定义实例方法时有HasThis.

标准基本上告诉 .NET 使用 CLR Fastcall,而 HasThis 告诉编译器在第一个参数中传递一个隐藏的 this*。