重複の可能性:
c#に関数ポインタはありますか?
C#のデリゲートは、イテレーターが組み込まれたタイプセーフな関数ポインターです。
指定された署名を持つ有効な関数を指すことが保証されています(誰が何を知っているかを指すようにポインターをキャストできるCとは異なります)。また、複数の有界関数を反復処理するという概念もサポートしています。
C#では、デリゲートはmulti-castであり、複数の関数を反復処理できることを意味します。例えば:
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++のポインターは、本格的なオブジェクトを参照する必要はありません。 Cには関数ポインタがあり、オブジェクト指向言語はサポートされていませんでした。デリゲートは真の関数オブジェクトです。