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

c#中的委托和c#x2B中的函数指针有什么区别+;?,c#,c++,delegates,function-pointers,C#,C++,Delegates,Function Pointers,可能重复: 我感兴趣的是发现C和C++之间的区别。C++函数指针是同步的,除非你自己编写多线程能力。 C/C++中的指针不需要引用完整的对象。C有函数指针,没有面向对象的语言支持。委托是真正的函数对象。C#中的委托是带有内置迭代器的类型安全函数指针 它保证指向具有指定签名的有效函数(不同于C,C可以将指针转换为指向谁知道是什么)。它还支持迭代多个绑定函数的概念 在C#中,委托是多播的,这意味着它们可以迭代多个函数。例如: class Program { delegate void Foo

可能重复:

<>我感兴趣的是发现C和C++之间的区别。C++函数指针是同步的,除非你自己编写多线程能力。 C/C++中的指针不需要引用完整的对象。C有函数指针,没有面向对象的语言支持。委托是真正的函数对象。

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

它保证指向具有指定签名的有效函数(不同于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..");
   }
}

嗯,一个是C语言,另一个是C/C++。如果我错了,请纠正我,但是C++(或者至少STL)也有委托吗?嗯……我会说是和不是。你可以指定函数指针的返回类型和参数,这是你提到的很多事情。我能想到的唯一例外是,如果你把它扔到一个空白处*。是的,我想这更多的是语言/运行时的差异。所有托管指针都是“安全的”,运行时保护它们指向的内容,您不能随意增加或重新解释它们。当然,C语言中有“不安全”的代码,但这是另一个主题)稍微修改了我的答案,使之更清晰。
支持迭代多个绑定函数的概念。
——这意味着什么?不能用C++来实现这一点。.NET有单播和多播委托。多播委托实现
+=
和“-=`操作符,以从调用列表中添加和删除方法。在C#中创建的所有代理都是多播代理。