Console.WriteLine("Обращение строки.");
for(j=0, i=s.Length-1; i >= 0; i--, j++) temp += s[i];
return temp;
};
string str;
// Обратиться к лямбда-выражениям с помощью делегатов.
StrMod strOp = ReplaceSpaces;
str = strOp("Это простой тест.");
Console.WriteLine("Результирующая строка: " + str);
Console.WriteLine() ;
strOp = RemoveSpaces;
str = strOp("Это простой тест.");
Console.WriteLine("Результирующая строка: " + str);
Console.WriteLine();
strOp = Reverse;
str = strOp("Это простой тест.");
Console.WriteLine("Результирующая строка: " + str);
}
}
Результат выполнения кода этого примера оказывается таким же, как и в первом примере применения делегатов.
Замена пробелов дефисами.
Результирующая строка: Это-простой-тест.
Удаление пробелов.
Результирующая строка: Этопростойтест.
Обращение строки.
Результирующая строка: .тсет йотсорп отЭ
События
Еще одним важным средством С#, основывающимся на делегатах, является
События являются членами класса и объявляются с помощью ключевого слова event
. Чаще всего для этой цели используется следующая форма:
event делегат_события имя_события;
где
Рассмотрим для начала очень простой пример.
// Очень простой пример, демонстрирующий событие,
using System;
// Объявить тип делегата для события,
delegate void MyEventHandler();
// Объявить класс, содержащий событие,
class MyEvent {
public event MyEventHandler SomeEvent;
// Этот метод вызывается для запуска события,
public void OnSomeEvent() {
if (SomeEvent != null)
SomeEvent();
}
}
class EventDemo {
// Обработчик события,
static void Handler() {
Console.WriteLine("Произошло событие");
}
static void Main() {
MyEvent evt = new MyEvent();
// Добавить метод Handler() в список событий,
evt.SomeEvent += Handler;
// Запустить событие,
evt.OnSomeEvent();
}
}
Вот какой результат получается при выполнении этого кода.
Произошло событие
Несмотря на всю свою простоту, данный пример кода содержит все основные элементы, необходимые для обработки событий. Он начинается с объявления типа делегата для обработчика событий, как показано ниже.
delegate void MyEventHandler();
Все события активизируются с помощью делегатов. Поэтому тип делегата события определяет возвращаемый тип и сигнатуру для события. В данном случае параметры события отсутствуют, но их разрешается указывать.
Далее создается класс события MyEvent
. В этом классе объявляется событие SomeEvent
в следующей строке кода.
public event MyEventHandler SomeEvent;
Обратите внимание на синтаксис этого объявления. Ключевое слово event
уведомляет компилятор о том, что объявляется событие.
Кроме того, в классе MyEvent
объявляется метод OnSomeEvent()
, вызываемый для сигнализации о запуске события. Это означает, что он вызывается, когда происходит событие. В методе OnSomeEvent()
вызывается обработчик событий с помощью делегата SomeEvent
.
if(SomeEvent != null)
SomeEvent();