【发布时间】:2011-12-27 04:32:32
【问题描述】:
【问题讨论】:
-
嗯,一个来自 C#,另一个来自 C/C++。
-
如果我错了,请纠正我,但 C++(或至少 stl)也没有代表吗?
标签: c# c++ delegates function-pointers
【问题讨论】:
标签: c# c++ delegates function-pointers
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..");
}
}
【讨论】:
supports the concept of iterating through multiple bound functions. -- 这是什么意思?你不能用 C++ 做到这一点?
+= 和 '-=` 运算符以在调用列表中添加和删除方法。您在 C# 中创建的所有委托都是多播委托。
C# 中的委托可以是同步的也可以是异步的;除非您编写自己的多线程功能,否则 C++ 函数指针是同步的。
C/C++ 中的指针不必引用成熟的对象。 C 有函数指针,没有面向对象的语言支持。委托是真正的函数对象。
【讨论】: