Ниже приведен пример групповой адресации. Это переработанный вариант предыдущих примеров, в котором тип значений, возвращаемых методами манипулирования строками, изменен на void, а для возврата измененной строки в вызывающую часть кода служит параметр типа ref. Благодаря этому методы оказываются более приспособленными для групповой адресации.

// Продемонстрировать групповую адресацию.

using System;

// Объявить тип делегата.

delegate void StrMod(ref string str);

class MultiCastDemo {

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

static void ReplaceSpaces(ref string s) {

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

}

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

static void RemoveSpaces(ref string s) { string temp = ""; int i;

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

s = temp;

}

// Обратить строку.

static void Reverse(ref string s) { string temp = ""; int i, j;

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

s = temp;

}

static void Main() {

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

StrMod strOp;

StrMod replaceSp = ReplaceSpaces;

StrMod removeSp = RemoveSpaces;

StrMod reverseStr = Reverse; string str = "Это простой тест.";

// Организовать групповую адресацию. strOp = replaceSp;

strOp += reverseStr;

// Обратиться к делегату с групповой адресацией. strOp(ref str);

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

Console.WriteLine();

// Удалить метод замены пробелов и добавить метод удаления пробелов. strOp -= replaceSp; strOp += removeSp;

str = "Это простой тест."; // восстановить исходную строку

// Обратиться к делегату с групповой адресацией. strOp(ref str);

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

Console.WriteLine() ;

}

}

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

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

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

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

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

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

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

В методеMain() из рассматриваемого здесь примера кода создаются четыре экземпляра делегата. Первый из них,strOp,является пустым, а три остальных ссылаются на конкретные методы видоизменения строки. Затем организуется групповая адресация для вызова методовRemoveSpaces () иReverse (). Это делается в приведенных ниже строках кода.

strOp = replaceSp; strOp += reverseStr

Перейти на страницу:

Похожие книги