c#中有函数指针吗?

我正在尝试学习一些c#编码,并想知道函数指针的c ++概念是否包含在c#中。 我看到有代表这样的事情。 它们是相同的概念吗? 或者他们在更基础的层面上有所区别?

委托本质上是函数指针,但内置了额外的多播function。因此,您可以为同一个委托分配多个函数,并且在调用委托时将按顺序调用它们。

代理也有内置的异步接口,并且在为委托分配新function时具有共同/差异(在.NET 4中,当传递委托时)

正如其他人所说的那样,你将需要在C#中使用委托来实现你在C ++中使用函数指针的情况。 委托在概念上类似于函数指针,但使用起来更加愉快,因为它们不仅封装了函数,还封装了“接收”对象,它将是调用的“this”。

请注意,CLR确实具有函数指针的概念。 如果您仔细研究C#编译器如何生成构造委托的代码,您会看到它对函数进行托管引用并将其传递给委托构造函数。 C#中没有语言function允许您获取“裸”函数指针并直接操作它。

但是,由于CLR中存在这个概念,理论上可能未来版本的C#可以支持函数指针作为不安全代码中的第一类概念,就像我们支持不安全代码中的数据指针一样。 在这种情况下我们要做的是(1)跟踪函数指针的签名作为指针类型,以及(2)发出使用“calli”(通过指针间接调用)CIL操作码的代码。

这将提高某些模糊互操作场景的效率,在今天基本上你必须使编组代码跳过很多圈,单独构建委托实例,以便编组人员可以获得存储在其中的函数指针。 如果我们可以避免需要代理构造的费用并直接进入函数指针那么那些现在罕见的互操作方案可能会变得更便宜。

但是,如果我是你,我不会屏住呼吸等待这个function。 我们已经对它进行了原型设计并且它的工作原理相当不错,但我不认为需要将它添加到像C#这样的通用语言中。

不是在经典的C / C ++意义上,没有。 但这个概念有点类似 – .NET引入了委托的概念来处理需要变量来调用方法的情况。 代表不能像指针那样“笨拙”,内置类型安全。

如果“正确”使用C风格的函数指针,则概念类似。 但似乎有很多遗留代码可以对指针进行有趣的操作以绕过类型安全或什么不是。

委托在某些方面类似于函数指针,但实际上它更接近于只有一个函数与注册处理程序和多播调度机制相结合的接口。

所以它不仅仅是一个函数指针。