Читайте также:
|
|
using System;
// Введем собственный делегат, не принимающий
// никаких значений.
delegate void MyDelegate();
// Это тестовый класс, он представляет собой гипотетический
// компонент кнопки.
class Button
{
// Введем общедоступное событие, к которому
// смогут подключаться все желающие.
public event MyDelegate Click;
// Данная функция необходима для того, чтобы
// симулировать событие нажатия на кнопку.
public void SimulateClick()
{
// Вызываем функции, связанные с событием Click,
// предварительно проверив, зарегистрировался
// ли кто-нибудь в данном событии.
if (Click!= null)
Click();
}
};
class App
{
static void Main()
{
// Создаем экземпляр класса/компонента.
Button sc = new Button();
// Добавляем обработчик к его событию.
sc.Click += new MyDelegate(Handler);
// Сами вызовем функцию, которая инициирует
// возникновение события нажатия на кнопку.
sc.SimulateClick();
}
// А это функция-обработчик события нажатия на кнопку.
static void Handler()
{
Console.WriteLine("Hello, World!");
}
};
Рассмотрим, какой код поддержки события был создан компилятором. Для этого изучим IL- код.
Во-первых, компилятор создал поле-делегат, в котором хранятся все зарегистрированные обработчики события..field private class MyDelegate Click
Обратите внимание, что поле является закрытым и может быть использовано только из самого класса, исключая даже его потомков (private). Также компилятор создал одноименное специализированное свойство, в котором указаны методы, реализующие внешнюю работу с данным событием. Причем необходимо отметить, что это свойство по умолчанию является общедоступным..event MyDelegate Click
{
.addon instance void Button::add_Click(class MyDelegate)
.removeon instance void Button::remove_Click(class MyDelegate)
}
События — это члены типа, обеспечивающие такого рода взаимодействие. Тип, в котором определены события, как минимум поддерживает:
■ регистрацию статического метода типа или экземплярного метода объекта, заинтересованных в получении уведомления о событии;
■ отмену регистрации статического метода типа или экземплярного метода объекта, получающих уведомления о событии;
■ уведомление зарегистрированных методов о том, что событие произошло.
Типы могут предоставлять эту функциональность при определении событий, так как они поддерживают список зарегистрированных методов. Когда событие происходит, тип уведомляет об этом все зарегистрированные методы.
Дата добавления: 2015-01-30; просмотров: 74 | Поможем написать вашу работу | Нарушение авторских прав |