Есть ли эквивалент функторам в C#?У функторов есть эквивалент в C#?
У C# есть Func <,>, делегаты и анонимные методы, но не все эти указатели на метод?
C++ Functor - это класс, а не указатель на метод.
Есть ли эквивалент функторам в C#?У функторов есть эквивалент в C#?
У C# есть Func <,>, делегаты и анонимные методы, но не все эти указатели на метод?
C++ Functor - это класс, а не указатель на метод.
C# имеет Func <,>, делегатов и анонимные методы , но не все из этих указателей на метод?
Нет. Даже делегаты C# - это классы, реализованные компилятором для вас. Эти сгенерированные классы (для делегатов) получены из MulticastDelegate
, который, в свою очередь, происходит от Delegate
.
Короче говоря, делегат является синтаксическим сахаром для класса, сгенерированного компилятором.
Хорошо. Будут ли они похожими на Фюнторов? – 4thSpace
@ 4thSpace: «похоже» в каком смысле? В C# вы не можете перегружать 'operator()'. Поэтому, если вы имеете в виду это, то это не похоже. C# - это другой язык, он делает несколько вещей по-другому, достигает их по-разному. – Nawaz
Оператор()? Вы имеете в виду нечто иное, чем это http://msdn.microsoft.com/en-us/library/aa288467(v=vs.71).aspx? – 4thSpace
Оба lambdas (Func <>, Action <>), а делегаты (названные так же анонимно) являются классами.
Если вам нужен указатель на метод (передать его в небезопасный код, например), вы должны использовать сортировочных:
IntPtr pFunc = Marshal.GetFunctionPointerForDelegate(myDelegate);
Этот ответ может помочь http://stackoverflow.com/a/974639/187697 – keyboardP
Я видел это, но они были специфичны для его вопроса, а не для общего. – 4thSpace
Этот ответ содержит список аппроксимаций. –