Възможен дубликат:
има ли указатели на функции в c#?
Интересувам се да открия разликата между делегат в C# и функционален указател в C++.
Възможен дубликат:
има ли указатели на функции в c#?
Интересувам се да открия разликата между делегат в C# и функционален указател в 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..");
}
}
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# е multicast (това може или не може да е така в други .NET езици). Разбира се, можете да внедрите multicast делегати в C++ - Можете да приложите всичко, което искате :)
- person Mike Christensen; 12.11.2011
Делегатите в C# могат да бъдат или синхронни, или асинхронни; Функционалните указатели на C++ са синхронни, освен ако не напишете своя собствена многонишкова способност.
Не е необходимо указателят в C/C++ да препраща към цялостен обект. C имаше функционални указатели и нямаше поддръжка на обектно-ориентиран език. Делегатите са истински функционални обекти.