Подтвердить что ты не робот

В чем разница между делегатом в С# и указателем функции в С++?

Возможный дубликат:
Есть ли указатели на функции в С#?

Мне интересно найти разницу между делегировать в С# и указатель функции на С++.

4b9b3361

Ответ 1

Делегат в С# - это указатель на функцию типа с встроенным итератором.

Он гарантированно указывает на действительную функцию с указанной сигнатурой (в отличие от 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..");
   }
}

Ответ 2

Делегаты в С# могут быть либо синхронными, либо асинхронными; Указатели функций С++ являются синхронными, если вы не написали свои собственные возможности многопоточности.

Указатель в C/С++ не должен ссылаться на полномасштабный объект. C имеет указатели на функции и не поддерживает объектно-ориентированную языковую поддержку. Делегаты - это истинные объекты функции.