如何从Type Blob签名解释FNPTR?

时间:2018-07-11 13:25:56

标签: c# .net .net-assembly bytecode cil

我应该如何解释FNPTR,然后是MethodDefSig或MethodRefSig?我的意思是BOOLEAN是bool,OBJECT是对象,SZARRAY是从零开始的数组,但是FNPTR具有方法签名,我不能写类似这样的东西:

public static int*(int) myFunction();

有人可以向我解释它的工作原理吗?

1 个答案:

答案 0 :(得分:1)

FNPTR是一个签名元素,表示指向托管功能的低级指针,例如,calli操作码可以使用该指针。据我所知,只有C ++ / CLI可以使用它们(以支持标准的C ++函数指针和引用),我想低级语言是它们最初被包含在CIL中的原因。

尽管它是CLI的核心功能,但是反射API(除this thing之外)对它们的支持为零。除了为方法重载创建独特的签名外,它们没有实际用途,因此,您可以安全地使用IntPtr。

函数指针基本上是委托的低等价物,只是没有目标对象(而不是对象本身)。如果需要更高级别的等效项,则 Action Func 委托就足够了。