public interface IOperation
int Operate(int a, int b);
public class CustomOperation : IOperation
public int Operate(int a, int b)
return int.Parse(a.ToString() + b.ToString());
public interface IAdvancedCalculator
int Subtract(int a, int b);
int Multiply(int a, int b);
double Divide(int a, int b);
static abstract double Power(int @base, int exponent);
double ApplyOperation(int a, int b, IOperation operation);
public class AdvancedCalculator : IAdvancedCalculator
public int Add(int a, int b)
public int Subtract(int a, int b)
public int Multiply(int a, int b)
public double Divide(int a, int b)
public static double Power(int @base, int exponent)
return Math.Pow(@base, exponent);
public double ApplyOperation(int a, int b, IOperation operation)
return operation.Operate(a, b);
public static void Main()
IAdvancedCalculator calculator = new AdvancedCalculator();
Console.WriteLine(calculator.Add(1, 2));
Console.WriteLine(calculator.Subtract(1, 2));
Console.WriteLine(calculator.Multiply(5, 2));
Console.WriteLine(calculator.Divide(1, 2));
Console.WriteLine(AdvancedCalculator.Power(2, 2));
Console.WriteLine(calculator.ApplyOperation(4, 4, new CustomOperation()));