c#中有函数指针吗?

yam*_*pog 8 c# delegates function-pointers

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

Eri*_*ert 19

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

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

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

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

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


the*_*oop 16

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

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