Возможный дубликат:
есть ли указатели на функции в C #?
Мне интересно найти разницу между делегатом в C # и указатель на функцию в C ++.
Возможный дубликат:
есть ли указатели на функции в C #?
Мне интересно найти разницу между делегатом в C # и указатель на функцию в C ++.
Делегат в 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 ++?
- person Robert Harvey; 12.11.2011
+=
и '- = `для добавления и удаления методов из списка вызовов. Все делегаты, создаваемые на C #, являются делегатами многоадресной рассылки.
- person Mike Christensen; 12.11.2011
delegate
в C # является многоадресным (это может быть, а может и не быть в других языках .NET). Конечно, вы можете реализовать многоадресные делегаты на C ++ - вы можете реализовать все, что захотите :)
- person Mike Christensen; 12.11.2011
Делегаты в C # могут быть синхронными или асинхронными; Указатели функций C ++ являются синхронными, если вы не написали свою собственную многопоточность.
Указатель в C / C ++ не обязательно должен ссылаться на полноценный объект. В C были указатели на функции и не было поддержки объектно-ориентированного языка. Делегаты - это настоящие функциональные объекты.