На этом шаге мы рассмотрим пример использования делегата для передачи ссылки на методы аргументом другому методу.
В следующем примере мы используем делегат для того, чтобы передавать ссылки на методы аргументом другому методу. Программа достаточно простая: описывается статический метод, который используется для того, чтобы создать таблицу значений другого метода. Таблица формируется так. Берется некоторый метод, у которого целочисленный аргумент и который возвращает целочисленный результат. Аргумент метода изменяется в заданных пределах. Для каждого значения аргумента отображается значение метода. Этот простой алгоритм не зависит от того, для какого именно метода строится таблица значений. Главное, чтобы у метода был целочисленный аргумент, и он должен возвращать целочисленный результат. Именно та ситуация, когда разумно использовать делегаты. Рассмотрим программный код, представленный ниже.
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace pr170_1 { // Объявление делегата: delegate int MyDelegate(int n); // Класс с главным методом: class Program { // Статический метод для вычисления нечетных чисел: static int f(int n) { return 2 * n + 1; } // Статический метод для вычисления четных чисел: static int g(int n) { return 2 * n; } // Статический метод для вычисления квадратов чисел: static int h(int n) { return n * n; } // Статический метод, которому аргументом // передается ссылка на метод: static void display(MyDelegate F, int a, int b) { Console.WriteLine("{0, -4}| {1, 4}", "x", "F(x)"); Console.WriteLine("----------"); for(int k = a; k <= b; k++) { // Команда с вызовом экземпляра делегата: Console.WriteLine("{0,-4}|{1,4}", k, F(k)); } Console.WriteLine(); } // Главный метод: static void Main() { // Диапазон изменения аргумента: int a = 0, b = 5; Console.WriteLine("Нечетные числа:"); // Передача аргументом ссылки на метод: display(f, a, b); Console.WriteLine("Четные числа:"); // Передача аргументом ссылки на метод: display(g, a, b); Console.WriteLine("Числа в квадрате:"); // Передача аргументом ссылки на метод: display(h, a, b); // Задержка: Console.ReadLine(); } } }
В результате выполнения программы получаем следующее:
Рис.1. Результат выполнения программы
Программа небольшая и простая. В программе командой
delegate int MyDelegate(int n);
Console.WriteLine("{0, -4}| {1, 4}", "x", "F(x)");
Console.WriteLine("{0,-4}|{1,4}", k, F(k));
В главном методе программы при заданных значениях переменных a и b командами
display(f, a, b); , display(g, a, b); и display(h, a, b);
display(f, a, b);
На следующем шаге мы продолжим изучение этого вопроса.