web-dev-qa-db-ja.com

c#のデリゲートとc ++の関数ポインタの違いは何ですか?

重複の可能性:
c#に関数ポインタはありますか?

C#の デリゲート とC++の 関数ポインタ の違いを見つけることに興味があります。

23
Riporter

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

C#のデリゲートは、同期または非同期のいずれかになります。独自のマルチスレッド機能を作成しない限り、C++関数ポインターは同期します。

C/C++のポインターは、本格的なオブジェクトを参照する必要はありません。 Cには関数ポインタがあり、オブジェクト指向言語はサポートされていませんでした。デリゲートは真の関数オブジェクトです。

7
duffymo