Делегат в С# - это указатель на функцию типа с встроенным итератором.
Он гарантированно указывает на действительную функцию с указанной сигнатурой (в отличие от 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 имеет указатели на функции и не поддерживает объектно-ориентированную языковую поддержку. Делегаты - это истинные объекты функции.