В C ++ у нас есть тип std::function
, который можно использовать для переноса лямбд, функций и даже пользовательских классов. Вот пример пользовательского класса, заключенного в std::function
:
#include <functional>
struct A {
void operator()() {
}
};
std::function<void()> a = A();
Я, хотя то же самое было возможно с делегатами в C#, но я не могу заставить его работать:
class Program
{
delegate void Foo();
class Bar
{
public void Invoke()
{
}
}
static void Main()
{
new Foo(new Bar()); // CS0149: Method name expected
}
}
Я убежден, что это должно быть как-то возможно, потому что оператор delegate
внутренне создает новый класс, который наследуется от System.Delegate
, что говорит о том, что я могу создать свой собственный тип, чтобы сделать то же самое.