Объектно-ориентированное программирование на С#. Андрианова А.А - 68 стр.

UptoLike

68
Здесь определяется переменная f как указатель на функцию, которая
возвращает значение типа double и имеет один аргумент типа double.
Присвоим переменной f адрес функции вычисления синуса:
f = Math.Sin;
Таким же образом можно было присвоить переменной f адрес любой
из вышеперечисленных функций.
Далее вызывать функцию вычисления синуса можно через переменную
f:
double y = f(3.1415926); // вызов функции sin(3.1415926)
Делегаты могут выступать в качестве полей класса. Приведем пример
использования делегата в классе Equation. В зависимости от типа
уравнения мы вызываем соответствующую функцию: QSolve() или
LinSolve(). Тип уравнения определяется его коэффициентами на этапе
инициализации объекта. Поэтому в этот же момент в переменную-делегат
можно записать адрес соответствующей функции решения уравнения.
Выделим три метода решения уравнений QSolve() для квадратного
уравнения, LinSolve() для линейного уравнения и NullSolve() для
уравнения нулевого порядка. Для любого уравнения будет вызываться одна
из этих функций. Функция, которая будет решать конкретное уравнение,
будет определяться в конструкторе класса. Указатель на нее будет сохранен в
экземпляре делегата с именем solve, который является полем класса
Equation. Сам делегат как тип данных определен в пространстве имен
приложения (можно определить и внутри класса). Вызов метода решения
уравнения будет осуществляться с помощью делегата:
Equation e = new Equation(1,2,3);
e.solve();
e.PrintSolution();
Далее приведем полный код приложения для решения квадратного
уравнения.
      Здесь определяется переменная f как указатель на функцию, которая
возвращает значение типа double и имеет один аргумент типа double.
      Присвоим переменной f адрес функции вычисления синуса:

     f = Math.Sin;


     Таким же образом можно было присвоить переменной f адрес любой
из вышеперечисленных функций.
     Далее вызывать функцию вычисления синуса можно через переменную
f:

     double y = f(3.1415926);      // вызов функции sin(3.1415926)


      Делегаты могут выступать в качестве полей класса. Приведем пример
использования делегата в классе Equation. В зависимости от типа
уравнения мы вызываем соответствующую функцию: QSolve() или
LinSolve(). Тип уравнения определяется его коэффициентами на этапе
инициализации объекта. Поэтому в этот же момент в переменную-делегат
можно записать адрес соответствующей функции решения уравнения.
      Выделим три метода решения уравнений – QSolve() для квадратного
уравнения, LinSolve() – для линейного уравнения и NullSolve() – для
уравнения нулевого порядка. Для любого уравнения будет вызываться одна
из этих функций. Функция, которая будет решать конкретное уравнение,
будет определяться в конструкторе класса. Указатель на нее будет сохранен в
экземпляре делегата с именем solve, который является полем класса
Equation. Сам делегат как тип данных определен в пространстве имен
приложения (можно определить и внутри класса). Вызов метода решения
уравнения будет осуществляться с помощью делегата:

     Equation e = new Equation(1,2,3);
     e.solve();
     e.PrintSolution();


     Далее приведем полный код приложения для решения квадратного
уравнения.




68