哪些 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
。但是它为什么适用于实例方法呢?有什么区别?
编辑:
这里有一些来自实验的更多信息:
- 用
HasThis
或 Standard
生成的构造函数似乎总是生成反映 Standard
的方法。
- 使用
HasThis
生成的实例方法反映到 HasThis
,使用 Standard
生成的实例方法反映到 Standard|HasThis
。
- "static" 代码编译定义的实例方法反映到
Standard|HasThis
。
所以结论是我应该始终使用 Standard
吗?老实说,仍然看不出有什么区别,因为这两种方法都有效。
定义静态方法时使用标准。
使用标准 |定义实例方法时有HasThis.
标准基本上告诉 .NET 使用 CLR Fastcall,而 HasThis 告诉编译器在第一个参数中传递一个隐藏的 this*。
这里的介绍性指南说您可以使用 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
。但是它为什么适用于实例方法呢?有什么区别?
编辑:
这里有一些来自实验的更多信息:
- 用
HasThis
或Standard
生成的构造函数似乎总是生成反映Standard
的方法。 - 使用
HasThis
生成的实例方法反映到HasThis
,使用Standard
生成的实例方法反映到Standard|HasThis
。 - "static" 代码编译定义的实例方法反映到
Standard|HasThis
。
所以结论是我应该始终使用 Standard
吗?老实说,仍然看不出有什么区别,因为这两种方法都有效。
定义静态方法时使用标准。
使用标准 |定义实例方法时有HasThis.
标准基本上告诉 .NET 使用 CLR Fastcall,而 HasThis 告诉编译器在第一个参数中传递一个隐藏的 this*。