При написании API или объекта многократного использования существует ли какая-либо техническая причина, почему все вызовы методов, возвращающие 'void', должны не просто возвращать 'this' (* это в С++)?
Например, используя класс строк, мы можем делать такие вещи:
string input= ...;
string.Join(input.TrimStart().TrimEnd().Split("|"), "-");
но мы не можем этого сделать:
string.Join(input.TrimStart().TrimEnd().Split("|").Reverse(), "-");
.. потому что Array.Reverse() возвращает void.
Есть много других примеров, когда API имеет много операций, возвращающих пустоты, поэтому код заканчивается следующим образом:
api.Method1();
api.Method2();
api.Method3();
.. но было бы вполне возможно написать:
api.Method1().Method2().Method3()
.. если дизайнер API допустил это.
Есть ли техническая причина для следования этому маршруту? Или это просто вещь стиля, указывающая на изменчивость/новый объект?
(x-ref Стилистический вопрос о возвращении пустоты)
Эпилог
Я принял ответ Luvieere, поскольку я думаю, что это лучшее представляет намерение/дизайн, но, похоже, есть популярные примеры API, которые отличаются от этого:
В С++ cout << setprecision(..) << number << setwidth(..) << othernumber;
, похоже, изменен объект cout, чтобы изменить следующую вставленную датум.
В .NET, Stack.Pop()
и Queue.Dequeue()
оба возвращают элемент, но также изменяют коллекцию.
Подходит для ChrisW и других для получения подробной информации о фактических затратах на производительность.