Я просто не могу обернуть вокруг себя голову.
Как я понимаю, это динамическое добавление логики в класс. Готовы ли для этого классы в рамках?
Почему я должен просто расширить класс и добавить к нему функциональные возможности в расширении. Я был бы глобально доступным, и афайк был бы намного легче поддерживать.
Я читал, что существует 4 типа функторов:
Comparer
Закрытие
Предикат
Трансформатор
Мы должны, вероятно, обращаться с каждым из них.
p.s. есть что-то подобное в vb?
Поэтому я могу заявить, что я считаю, что лямбда-выражения являются функторами. Это немного облегчает мне вещи:) (хе-хе)
- Лямбда-выражения являются функторами?
- Анонимные функции - это функторы?
Но я задал этот вопрос, потому что я столкнулся с другим типом fucntors, а именно:
delegate void FunctorDelegate(int value);
class Addition {
FunctorDelegate _delegate;
public Addition AddDelegate(FunctorDelegate deleg) {
_delegate += deleg;
return this;
}
public int AddAllElements(IList< int> list) {
int runningTotal = 0;
foreach( int value in list) {
runningTotal += value;
_delegate(value);
}
return runningTotal;
}
}
И затем называя это следующим:
int runningTotal = new Addition()
.AddDelegate(new FunctorDelegate(
delegate(int value) {
if ((value % 2) == 1) {
runningOddTotal += value;
}
}))
.AddDelegate(new FunctorDelegate(
delegate(int value) {
if ((value % 2) == 0) {
runningEvenTotal += value;
}
}))
.AddAllElements(list);
Так что никаких фантазийных вещей в стиле лямбда.
Теперь у меня есть этот пример, но не совсем понятно, почему это "хорошее" решение.
Являются ли делегаты (функторы) используемыми в качестве лямбда-выражений или анонимными методами "в большинстве случаев" только как ярлык для программиста? Есть, насколько я вижу, только несколько случаев, когда они на самом деле являются предпочтительным выбором для проблемы.