.net - "!!"在 MSIL 中的明确含义是什么?

标签 .net cil

当在 MSIL 中调用方法时,我通常会看到值 !!0 被传递给参数,通常是连续多次。

这是什么意思,具体来说,我认为这意味着从堆栈中弹出第一个值并将其作为参数推送。但是,我想知道是否还有比这更进一步的说明。例如,第一个 ! 是否表示某种含义,而第二个 ! 表示重复上一步,为下一个参数分配做准备?

明确地说,!! 运算符是做什么的?

最佳答案

Generic parameter in a method definition, accessed by index from 0

the ECMA specification for CIL 所示.

第 11.7.1 节 - 类型。这是 ECMA 335,如果将来链接失效了:)

所以用人类的话来说,它是一个指向泛型方法的泛型参数类型的指针。对于泛型类型的泛型参数类型,您可以使用 !0 (和 !1 等)。

关于.net - "!!"在 MSIL 中的明确含义是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29009470/

相关文章:

.net - 将 FFMpeg 编译为 .net 可执行文件

c# - MSIL代码调查

c# - OpCodes.Ret 使用的地址存储在哪里?可以改变吗?

c# - Azure 应用服务上的服务器垃圾收集

.net - 将 Lucene 集成到 .NET 桌面应用程序中

c# - 如何发现嵌入资源的 "path"?

c# - 防止 DynamicMethod VerificationException - 操作可能会破坏运行时的稳定性

c# - 检查类型 TA 是否可以在运行时转换为类型 TB? (考虑的不仅仅是继承)

c# - 如何在没有 IEnumerable 的情况下循环该对象

.net - 服务引用不生成客户端类型