【问题标题】:What is the difference between delegate in c# and function pointer in c++? [duplicate]c#中的委托和c++中的函数指针有什么区别? [复制]
【发布时间】:2011-12-27 04:32:32
【问题描述】:

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

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

【问题讨论】:

  • 嗯,一个来自 C#,另一个来自 C/C++。
  • 如果我错了,请纠正我,但 C++(或至少 stl)也没有代表吗?

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


【解决方案1】:

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..");
   }
}

【讨论】:

  • 嗯...我会说是也不是。您可以指定函数指针的返回类型和参数,它执行您提到的许多事情。我能想到的唯一例外是如果你将它转换为 void*。
  • 是的,我想这更多是语言/运行时的差异。所有托管指针都是“安全的”,运行时保护它们指向的内容,您不能随心所欲地增加它们或重新解释它们。当然,C# 中有“不安全”的代码,但这是另一个话题)
  • 稍微修改了我的答案以使其更清晰..
  • supports the concept of iterating through multiple bound functions. -- 这是什么意思?你不能用 C++ 做到这一点?
  • .NET 具有单播和多播委托。多播委托实现 += 和 '-=` 运算符以在调用列表中添加和删除方法。您在 C# 中创建的所有委托都是多播委托。
【解决方案2】:

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

C/C++ 中的指针不必引用成熟的对象。 C 有函数指针,没有面向对象的语言支持。委托是真正的函数对象。

【讨论】:

    猜你喜欢
    • 2010-10-31
    • 2021-09-21
    • 2022-01-16
    • 1970-01-01
    • 1970-01-01
    • 2011-12-21
    • 1970-01-01
    • 2010-12-13
    • 2012-06-01
    相关资源
    最近更新 更多