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

delegate возвращаемый_тип имя(список_параметров) ;

где возвращаемый_тип обозначает тип значения, возвращаемого методами, которые будут вызываться делегатом; имя — конкретное имя делегата; список_параметров — параметры, необходимые для методов, вызываемых делегатом. Как только будет создан экземпляр делегата, он может вызывать и ссылаться на те методы, возвращаемый тип и параметры которых соответствуют указанным в объявлении делегата.

Самое главное, что делегат может служить для вызова любого метода с соответствующей сигнатурой и возвращаемым типом. Более того, вызываемый метод может быть методом экземпляра, связанным с отдельным объектом, или же статическим методом, связанным с конкретным классом. Значение имеет лишь одно: возвращаемый тип и сигнатура метода должны быть согласованы с теми, которые указаны в объявлении делегата.

Для того чтобы показать делегат в действии, рассмотрим для начала простой пример его применения.

// Простой пример применения делегата.

using System;

// Объявить тип делегата, delegate string StrMod(string str);

class DelegateTest {

// Заменить пробелы дефисами.

static string ReplaceSpaces(string s) {

Console.WriteLine('Замена пробелов дефисами.'); return s.Replace(' ',    '-');

}

// Удалить пробелы.

static string RemoveSpaces(string s) { string temp = ''; int i;

Console.WriteLine('Удаление пробелов.'); for(i=0; i < s.Length; i++) if(s[i] != '    ') temp += s [i];

return temp;

}

// Обратить^строку. static string Reverse(string s) { string temp = ''; int i, j;

Console.WriteLine('Обращение строки. ') ; for(j=0, i=s.Length-1; i >= 0; i—, j++) temp += s [i];

return temp;

}

static void Main() {

// Сконструировать делегат.

StrMod strOp = new StrMod(ReplaceSpaces) ; string str;

// Вызвать методы с помощью делегата, str = strOp('Это простой тест.');

Console.WriteLine('Результирующая строка: ' + str);

Console.WriteLine();

strOp = new StrMod(RemoveSpaces); str = strOp('Это простой тест.');

Console.WriteLine('Результирующая строка: ' + str);

Console.WriteLine();

strOp = new StrMod(Reverse); str = strOp('Это простой тест.');

Console.WriteLine('Результирующая строка: ' + str);

}

}

Вот к какому результату приводит выполнение этого кода.

Замена пробелов дефисами.

Результирующая строка: Это-простой-тест.

Удаление пробелов.

Результирующая строка: Этопростойтест.

Обращение строки.

Результирующая строка:    .тсет    йотсорп    отЭ

Рассмотрим данный пример более подробно. В его коде сначала объявляется делегат

Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату