如何从 Type blob 签名中解释 FNPTR?

How to interpret FNPTR from Type blob signature?

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

public static int*(int) myFunction();

谁能给我解释一下它是如何工作的?

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

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

函数指针基本上是委托的低级等价物,只是没有目标对象(并且不是对象本身)。如果您需要高级等价物,ActionFunc 委托可能就足够了。