Разница в том, что вы говорите CalcMyTotal
, какой метод использовать - функциональную композицию. CalcMyTotal
не знает ни о одном из задействованных методов (или о любых других, которые вы могли бы придумать) - и не нуждается в этом. Все, что нужно знать, это «ты даешь мне способ что-то сделать, я сделаю это». В более типичном примере CalcMyTotal
будет делать что-то большее, чем просто вызов метода, например:
var somethingTricky = LotsOfWork(amt);
var intermediateValue = calcTotal(somethingTricky);
return SomeMoreWork(intermediateValue);
Суть здесь: вызывающему не нужно знать, что происходит внутри CalcMyTotal
- ему просто нужно предоставить какой-то механизм для «вычисления итогов»; и CalcMyTotal
не нужно ничего знать о задействованном механизме. Вы можете думать об этом как об интерфейсе с одним методом.
Для полноты вы также можете сделать это (возможно, более четко) как:
public static double CalcMyTotal(double amt, Func<double,double> calcTotal) {...}
(обратите внимание на использование Func<...>
) и вызывайте с использованием лямбда-синтаксиса:
double tot1 = CalcMyTotal(100.34, amt => amt * 0.014);