static void Test() { Console.WriteLine("Enter a?b ?(+-*/) "); string expression = Console.ReadLine(); ///20+30 char sign = ' '; try { if (expression.Contains('+')) { sign = '+'; } if (expression.Contains('-')) { sign = '-'; } if (expression.Contains('*')) { sign = '*'; } if (expression.Contains('/')) { sign = '/'; } string[] numbers = expression.Split(sign); double a = double.Parse(numbers[0]); double b = double.Parse(numbers[1]); Matem matem = new Matem(); FuncDelegate func = null; double res = 0; switch (sign) { case '+': func = matem.Sum; break; case '-': func = new FuncDelegate(matem.Sub); break; case '*': func = Matem.Mult; break; case '/': func = Matem.Div; break; default: throw new Exception("no sign"); } // Console.WriteLine($"{a}{sign}{b}={func?.Invoke(a,b)}"); Console.WriteLine($"{a}{sign}{b}={func(a, b)}"); } catch (Exception ex) { Console.WriteLine(ex.Message); } }
static void Test2() { Matem matem = new Matem(); FuncDelegate func = matem.Sum; func += matem.Sub; func += Matem.Mult; func += Matem.Div; double a = 10, b = 20; Console.WriteLine($"{a} {b}={func(a, b)}"); Console.WriteLine($"+--------------------------------------"); foreach (FuncDelegate f in func.GetInvocationList()) { Console.WriteLine($"{a} {f.Method.Name} {b}={f(a, b)}"); } }