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);

}

}

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

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

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

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

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

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

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

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

delegate string StrMod(string str);

Как видите, делегатStrModпринимает один параметр типаstringи возвращает одно значение того же типа.

Далее в классе DelegateTest объявляются три статических метода с одним параметром типа string и возвращаемым значением того же типа. Следовательно, они соответствуют делегату StrMod. Эти методы видоизменяют строку в той или иной форме. Обратите внимание на то, что в методе Rep la се Spaces () для замены пробелов дефисами используется один из методов типа string — Replace ().

В методеMain() создается переменная экземпляраstrOpссылочного типаStrModи затем ей присваивается ссылка на методReplaceSpaces (). Обратите особое внимание на следующую строку кода.

StrMod strOp = new StrMod(ReplaceSpaces);

В этой строке методReplaceSpaces() передается в качестве параметра. При этом указывается только его имя, но не параметры. Данный пример можно обобщить: при получении экземпляра делегата достаточно указать только имя метода, на который должен ссылаться делегат. Ясно, что сигнатура метода должна совпадать с той, что указана в объявлении делегата. В противном случае во время компиляции возникнет ошибка.

Далее методReplaceSpaces() вызывается с помощью экземпляра делегатаstrOp,как показано ниже.

str = strOp("Это простой тест.");

Экземпляр делегатаstrOpссылается на методReplaceSpaces (), и поэтому вызывается именно этот метод.

Затем экземпляру делегатаstrOpприсваивается ссылка на методRemoveSpaces (),и с его помощью вновь вызывается указанный метод — на этот разRemoveSpaces ().

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

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