c#中的委托与c ++中的函数指针有什么区别?

时间:2011-11-11 16:49:15

标签: c# c++ delegates function-pointers

  

可能重复:
  are there function pointers in c#?

我有兴趣找到C#中的delegate和C ++中的function pointer之间的区别。

2 个答案:

答案 0 :(得分:29)

C#中的委托是一个带有内置迭代器的类型安全函数指针。

保证指向具有指定签名的有效函数(与C不同,指针可以转换为指向谁知道什么)。它还支持迭代多个绑定函数的概念。

在C#中,委托是多播,这意味着他们可以迭代多个函数。例如:

class Program
{
   delegate void Foo();

   static void Main(string[] args)
   {
      Foo myDelegate = One;
      myDelegate += Two;

      myDelegate(); // Will call One then Two
   }

   static void One()
   {
      Console.WriteLine("In one..");
   }

   static void Two()
   {
      Console.WriteLine("In two..");
   }
}

答案 1 :(得分:7)

C#中的委托可以是同步的,也可以是异步的;除非您编写自己的多线程功能,否则C ++函数指针是同步的。

C / C ++中的指针不需要引用一个完整的对象。 C有函数指针,没有面向对象的语言支持。代表是真正的功能对象。