Добавляете две функции? - PullRequest
4 голосов
/ 06 февраля 2011

Я только что просмотрел "C # in Depth" и наткнулся на следующий код:

Func<string> stringFunc = () => "";
Func<object> objectFunc = () => new object();
Func<object> combined = objectFunc + stringFunc;

Я почти уверен, что добавление двух функций не имеет смысла в математике, так почему любой программист хочет перегрузить двоичный код operator+ для функций? Кажется, это прекрасный пример того, почему перегрузка операторов может причинить вред (и я обычно поддерживаю идею перегрузки операторов).

  1. Что значит добавить две функции в C #? (Я ноб C #, так что терпите меня.)

  2. Согласны ли вы, что перегрузка operator+ здесь была ошибкой проекта?

  3. Что может быть лучше синтаксиса для достижения того, что он делает operator+ здесь?

Ответы [ 2 ]

3 голосов
/ 06 февраля 2011

Запись delegate1 + delegate2 создаст третий экземпляр делегата, который объединяет первые два, вызывая все функции в обоих делегатах.
Он в первую очередь предназначен для событий.

Документация

2 голосов
/ 06 февраля 2011

Добавление двух функций совершенно математично.Если вы считаете, что функции являются операторами, то пространство всех таких операторов является линейным пространством (при определенных условиях).Это очень продуктивная точка зрения, которая дает много полезных математических знаний.

Конечно, это не то, что здесь происходит, но я хотел бы обратить ваше внимание на математическую сторону вашего вопроса!

...