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 ().