Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Руководство_по_C#.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
10.01 Mб
Скачать

10.8Аксессоры событий

Для управления списком обработчиков событий служит расширенная форма оператора event, позволяющая использовать аксессоры событий. Эти аксессоры предоставляют средства для управления реализацией подобного списка в приведенной ниже форме:

event делегат_события имя_события

{

add

{

// Код добавления события в цепочку событий

}

remove

{

// Код удаления события из цепочки событий

}

}

В эту форму входят два аксессора событий: add и remove. Аксессор add вызывается, когда обработчик событий добавляется в цепочку событий с помощью оператора +=. В то же время аксессор remove вызывается, когда обработчик событий удаляется из цепочки событий с помощью оператора -=.

Когда вызывается аксессор add или remove, он принимает в качестве параметра добавляемый или удаляемый обработчик. Как и в других разновидностях аксессоров, этот неявный параметр называется value. Реализовав аксессоры add или remove, можно организовать специальную схему хранения обработчиков событий. Например, обработчики событий можно хранить в массиве, стеке или очереди.

Вышесказанное иллюстрирует нижеследующее:

using System;

namespace ConsoleApplication1

{

delegate void UI();

class MyEvent

{

UI[] evnt = new UI[5];

// Объявляем событие

public event UI UserEvent

{

// Используем аксессоры событий

add { evnt[1] = value; }

remove { evnt[1] = null; }

}

// Используем метод для запуска события

public void OnUserEvent() { evnt[1](); }

}

class UserInfo

{

string uiName, uiFamily;

int uiAge;

public UserInfo(string Name, string Family, int Age)

{

this.Name = Name;

this.Family = Family;

this.Age = Age;

}

public string Name { set { uiName = value; }

get { return uiName; } }

public string Family { set { uiFamily = value; }

get { return uiFamily; } }

public int Age { set { uiAge = value; } get { return uiAge; } }

// Обработчик события

public void UserInfoHandler()

{

Console.WriteLine("Событие вызвано!\n");

Console.WriteLine("Имя: {0}\nФамилия: {1}\nВозраст: {2}",

Name, Family, Age);

}

}

class Program

{

static void Main()

{

MyEvent evt = new MyEvent();

UserInfo user1 = new UserInfo("Jone","Smith",333);

// Добавляем обработчик события

evt.UserEvent += user1.UserInfoHandler;

// Запустим событие

evt.OnUserEvent();

Console.ReadKey();

}

}

}

Выполнение программы:

Событие вызвано!

Имя: Jone

Фамилия: Smith

Возраст: 333

Длинная нотация для определения событий удобна, если необходимо сделать нечто большее, чем просто добавлять и удалять обработчики событий, например, добавить синхронизацию для многопоточного доступа. Элементы управления WPF используют длинную нотацию для добавления функциональности "пузырькового" и туннельного распространения событий.