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

UptoLike

73
делегатов (метод получает в качестве параметра массив делегатов), или двух
делегатов (метод получает в качестве параметров два делегата):
Delegate Combine(Delegate[]);
Delegate Combine(Delegate, Delegate);
Также для этих целей можно использовать перегруженную операцию
"+=". Второй операнд операции представляет собой делегат или функцию,
которая добавляется в список вызова исходного делегата.
Обратную операцию удаление метода из списка вызова выполняют
статический метод Remove() и операция "-=".
Delegate Remove(Delegate, Delegate);
Удаляется последнее вхождение метода или списка вызовов делегата из
списка вызовов другого делегата.
Продемонстрируем использование комбинированных делегатов,
модифицировав класс Equation. Напомним, что комбинированный делегат
позволяет по цепочке вызывать несколько методов типа void с
одинаковыми параметрами. Решение уравнения может быть представлено в
виде последовательного выполнения трех действий определения типа
уравнения, собственно решения и печати результата. Каждое из этих
действий оформляется в отдельный метод (DefineTypeEquation(),
Solve(), PrintSolution()). Эти методы формируют список вызова
комбинированного делегата SolveEquation.
Отметим, что указанные методы нецелесообразно использовать по
отдельности. Например, метод Solve() не может выбрать конкретный
метод решения, пока не определен тип решаемого уравнения, печать
результата бессмысленна, если уравнение еще не решено. Поэтому решение
осуществляется с помощью вызова делегата, который комбинирует эти три
метода в нужной последовательности. Сами методы при этом могут быть
закрыты для пользователя (private). Список вызова делегата формируется
в конструкторе объекта класса Equation.
Метод DefineTypeEquation() в зависимости от коэффициентов
уравнения формирует значение переменной type, которая определяет тип
уравнения и добавляется в класс. Далее переменная type используется для
определения способа решения уравнения в методе Solve().
делегатов (метод получает в качестве параметра массив делегатов), или двух
делегатов (метод получает в качестве параметров два делегата):

   Delegate Combine(Delegate[]);
   Delegate Combine(Delegate, Delegate);

     Также для этих целей можно использовать перегруженную операцию
"+=". Второй операнд операции представляет собой делегат или функцию,
которая добавляется в список вызова исходного делегата.

     Обратную операцию – удаление метода из списка вызова выполняют
статический метод Remove() и операция "-=".

   Delegate Remove(Delegate, Delegate);

      Удаляется последнее вхождение метода или списка вызовов делегата из
списка вызовов другого делегата.
      Продемонстрируем использование комбинированных делегатов,
модифицировав класс Equation. Напомним, что комбинированный делегат
позволяет по цепочке вызывать несколько методов типа void с
одинаковыми параметрами. Решение уравнения может быть представлено в
виде последовательного выполнения трех действий – определения типа
уравнения, собственно решения и печати результата. Каждое из этих
действий оформляется в отдельный метод (DefineTypeEquation(),
Solve(), PrintSolution()). Эти методы формируют список вызова
комбинированного делегата SolveEquation.
      Отметим, что указанные методы нецелесообразно использовать по
отдельности. Например, метод Solve() не может выбрать конкретный
метод решения, пока не определен тип решаемого уравнения, печать
результата бессмысленна, если уравнение еще не решено. Поэтому решение
осуществляется с помощью вызова делегата, который комбинирует эти три
метода в нужной последовательности. Сами методы при этом могут быть
закрыты для пользователя (private). Список вызова делегата формируется
в конструкторе объекта класса Equation.
      Метод DefineTypeEquation() в зависимости от коэффициентов
уравнения формирует значение переменной type, которая определяет тип
уравнения и добавляется в класс. Далее переменная type используется для
определения способа решения уравнения в методе Solve().
                                                                        73