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

UptoLike

129
delegate тип имя_делегата<список_обобщенных_типов>
(список_параметров)
{
. . .
}
список_обобщенных_типов := T1 [,T2, . . ., TN], Ti
произвольный идентификатор обобщенного типа;
тип тип возвращаемого значения функций, на которые может
ссылаться делегат. В качестве этого типа может быть указан как конкретный
тип данных, так и один из списка обобщенных типов;
список_параметров список формальных параметров функций,
на которые ссылается делегат. Они также могут быть описаны как с
указанием конкретного типа данных, так и одного типа из списка
обобщенных типов.
Например, для хранения ссылки на функции сравнения объектов
произвольных типов, определим обобщенный делегат:
delegate bool CompareDelegate<T>(T ob1, T ob2);
Экземпляр этого делегата может указывать на любые функции
различных классов, в том числе и конструированных на основе обобщенных,
тип возвращаемого значения которых bool и формальными параметрами
которых являются два объекта одинакового типа. Этому прототипу
bool SomeMethod(Type ob1, Type ob2)
соответствуют все функции сравнения объектов.
Тогда функция сортировки может быть определена следующим
прототипом:
public static void Sort<T>(CompareDelegate <T> comparer,
T[] items, int left, int right)
где первым параметром является указатель на функцию сравнения,
задающую порядок сортировки элементов массива (по возрастанию или по
убыванию). Сам метод выглядит так:
   delegate тип имя_делегата<список_обобщенных_типов>
                                       (список_параметров)
   {
          .    .    .
   }

      список_обобщенных_типов := T1 [,T2, . . ., TN], Ti
– произвольный идентификатор обобщенного типа;
      тип – тип возвращаемого значения функций, на которые может
ссылаться делегат. В качестве этого типа может быть указан как конкретный
тип данных, так и один из списка обобщенных типов;
      список_параметров – список формальных параметров функций,
на которые ссылается делегат. Они также могут быть описаны как с
указанием конкретного типа данных, так и одного типа из списка
обобщенных типов.
      Например, для хранения ссылки на функции сравнения объектов
произвольных типов, определим обобщенный делегат:

   delegate bool CompareDelegate(T ob1, T ob2);

     Экземпляр этого делегата может указывать на любые функции
различных классов, в том числе и конструированных на основе обобщенных,
тип возвращаемого значения которых bool и формальными параметрами
которых являются два объекта одинакового типа. Этому прототипу

   bool SomeMethod(Type ob1, Type ob2)


соответствуют все функции сравнения объектов.
     Тогда функция сортировки может быть определена следующим
прототипом:

   public static void Sort(CompareDelegate  comparer,
                              T[] items, int left, int right)

где первым параметром является указатель на функцию сравнения,
задающую порядок сортировки элементов массива (по возрастанию или по
убыванию). Сам метод выглядит так:




                                                                      129