Студопедия  
Главная страница | Контакты | Случайная страница

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

События в среде .NET; реализация событий посредством делегатов.

Читайте также:
  1. V2:Профилактика девиантного поведения в молодежной среде. Социально-педагогическая работа с неформальными молодежными группами и объединениями
  2. WEB-браузер - назначение, основные функции, программная реализация, методы обмена информацией с расширениями сервера.
  3. WEB-сервер - назначение, основные функции, программная реализация, конкретные примеры
  4. А.22 Процесс соединения металлических заготовок без их расплавления посредством введения промежуточного металла
  5. Административно-правовые нормы, их действие и реализация.
  6. Алгебра событий
  7. Алгоритм нумерации событий.
  8. Асинхронные операции в среде .NET. Асинхронный вызов делегатов.
  9. Б) полезные знания, полученные посредством анализа данных.
  10. Более общим случаем вычисления количества информации в сообщении об одном из N, но уже неравновероятных событий. Этот подход был предложен К.Шенноном в 1948 году.

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 | Поможем написать вашу работу | Нарушение авторских прав

1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | <== 14 ==> | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 |


lektsii.net - Лекции.Нет - 2014-2024 год. (0.01 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав