Практикум по курсу "Объектно-ориентированное программирование" на языке C#. Андрианова А.А - 27 стр.

UptoLike

26
// делегат для представления математической функции
delegate double Function(double x);
Экземпляр данного делегата может хранить информацию о любом
методе, который получает в качестве параметра и возвращает вещественное
число, например, таким методом может быть статический метод Sin()
класса Math.
Таким образом, метод RootEquation() может получить указание
как вычислять функцию f(x) с помощью параметра типа указанного делегата.
2) Второй случай использования делегатов настройка алгоритма
решения задачи. Как уже было сказано, все три метода поиска корня
основываются на единой процедуре, которая отличается только реализацией
одного шага выбора точки, разбивающей отрезок на два. Для реализации
этого шага создадим в классе Solver три различных метода, информацию о
которых будет хранить экземпляр следующего делегата:
// делегат для определения точки деления исходного отрезка
delegate double PointIn (Function f, double a, double b);
В классе Solver данный экземпляр будем хранить в виде
статического поля method и инициализируем его в статическом
конструкторе:
class Solver
{
// делегат для определения точки деления отрезка
static PointIn method;
// статический конструктор
static Solver()
{
// инициализация генератора случайных чисел
Random r = new Random();
int q = r.Next(300)%3;
switch (q)
{
case 0:
// инициализация делегата функцией GetX1
method = GetX1;
Console.WriteLine("Выбран метод деления
отрезка пополам");
break;
   // делегат для представления математической функции
   delegate double Function(double x);

      Экземпляр данного делегата может хранить информацию о любом
методе, который получает в качестве параметра и возвращает вещественное
число, например, таким методом может быть статический метод Sin()
класса Math.
      Таким образом, метод RootEquation() может получить указание
как вычислять функцию f(x) с помощью параметра типа указанного делегата.
      2) Второй случай использования делегатов – настройка алгоритма
решения задачи. Как уже было сказано, все три метода поиска корня
основываются на единой процедуре, которая отличается только реализацией
одного шага – выбора точки, разбивающей отрезок на два. Для реализации
этого шага создадим в классе Solver три различных метода, информацию о
которых будет хранить экземпляр следующего делегата:

   // делегат для определения точки деления исходного отрезка
   delegate double PointIn (Function f, double a, double b);

     В классе Solver данный экземпляр будем хранить в виде
статического поля method и инициализируем его в статическом
конструкторе:

   class Solver
   {
      // делегат для определения точки деления отрезка
      static PointIn method;

      // статический конструктор
      static Solver()
      {
         // инициализация генератора случайных чисел
         Random r = new Random();
         int q = r.Next(300)%3;
         switch (q)
         {
            case 0:
               // инициализация делегата функцией GetX1
               method = GetX1;
               Console.WriteLine("Выбран метод деления
                                           отрезка пополам");
               break;



                                                                      26