using System.Collections.Generic;
public class FeeCalculator
public Func<int, int > Calculation;
public static FeeCalculator FeeA = new FeeCalculator() { Name="FeeA", Calculation = (x) => x+2};
public static FeeCalculator FeeB = new FeeCalculator() { Name="FeeB", Calculation = (x) => x+5};
public static FeeCalculator FeeX = new FeeCalculator() { Name="FeeX", Calculation = CalculateFeeX};
private static int CalculateFeeX(int x)
private List<FeeCalculator> FeeCalculations = new List<FeeCalculator>() { FeeA, FeeB};
public void AddCalculation(string aName, Func<int, int> aCalculation)
FeeCalculations.Add(new FeeCalculator() { Name = aName, Calculation = aCalculation });
public int Calculate(string Method, int input)
return FeeCalculations.Where(w => w.Name == Method).Single().Calculation.Invoke(input);
public static void Main()
FeeCalculator calc = new FeeCalculator();
Console.WriteLine("Hello World");
Console.WriteLine(calc.Calculate("FeeA", 5));
Console.WriteLine(calc.Calculate("FeeB", 5));
calc.AddCalculation("FeeC", (x) => x * x);
Console.WriteLine(calc.Calculate("FeeC", 5));
FeeCalculator.FeeA = new FeeCalculator() { Name="FeeA", Calculation = (x) => x*x*x};
Console.WriteLine(calc.Calculate("FeeA", 5));
calc = new FeeCalculator();
Console.WriteLine(calc.Calculate("FeeA", 5));