public delegate double CalcDeleg(List <double> list); // we could use Func public static double CalculateAverage(this List <double> values, CalcDeleg calcDeleg) { if (values == null) { throw new ArgumentNullException(nameof(values)); } if (calcDeleg == null) { throw new ArgumentNullException(nameof(values)); } return(calcDeleg(values)); }
static void Main(string[] args) { CalcDeleg sqr = delegate(int x) { return(x * x); }; Console.WriteLine("sqr(10) = " + sqr(10)); CalcDeleg cube = delegate(int x) { return(sqr(x) * x); }; Console.WriteLine("Cube(5) = " + cube(5)); int number = 100; CalcDeleg test = delegate(int x) { return(number + x); }; Console.WriteLine("Test(5) = " + test(5)); // ? 105 number++; // 101 CalcDeleg deleg = delegate { return(number); }; // якщо параметр не використовується - то можна упустити Console.WriteLine(deleg(-7878)); CalcAverageDeleg avg = delegate(int[] a) { double avgTemp = a.Average(); return(avgTemp); }; Console.WriteLine("Average = " + avg(1, 2, 3, 4, 5)); Transformer t = (ref int a) => a--; Console.WriteLine("transformer -- " + t(ref number) + " --> " + number); }
static void Main(string[] args) { CalcDeleg sqr = delegate(int x) { return(x * x); }; // анонімний метод Console.WriteLine("sqr(11) : {0}", sqr(11)); CalcDeleg cube = delegate(int x) { return(sqr(x) * x); }; Console.WriteLine("cube(5) : {0}", cube(5)); int number = 10; CalcDeleg summ = delegate(int x) { return(number + x); }; //захоплення змінної number ++number; // number = 11 Console.WriteLine("\navg(5) : {0}", summ(5)); // 11 + 5 CalcDeleg r = delegate { return(number); }; // якщо параметр неважливий(не використовується) - можна опустити Console.WriteLine(r(12345)); // 11 CalcAverageDeleg s = delegate(int[] a) { double avg = 0; for (int i = 0; i < a.Length; ++i) { avg += a[i]; } return(avg / a.Length); }; Console.WriteLine("Average(2, 2, 5, 4) : {0}", s(2, 3, 5, 4)); Transformer t = (ref int a) => -- a; // записали лямбду у екземпляр делегата Console.WriteLine("{0} {1}", t(ref number), number); }
static void CalcResult(string str, double arg1, double arg2, CalcDeleg DelParametr) { double result = DelParametr(arg1, arg2); Console.WriteLine(str + result.ToString()); }