Проверка.
Теперь осталось запустить счетчик класса ClassCounter и подождать, пока i станет равным 71. Как только i=71, запустится событие onCount по делегату MethodContainer, который (в свою очередь) запустит методы Message(), которые были подписаны на событие.
class Program
{
static void Main(string[] args)
{
ClassCounter Counter = new ClassCounter();
Handler_I Handler1 = new Handler_I();
Handler_II Handler2 = new Handler_II();
Counter.onCount += Handler1.Message;
Counter.onCount += Handler2.Message;
//Запустили счетчик
Counter.Count();
}
}
Результат: Пора действовать, ведь уже 71! Точно, уже 71!
Заключение.
Постарайтесь понять смысл и порядок создания события.
1. Определите условие возникновения события и методы которые должны сработать.
2. Определите сигнатуру этих методов и создайте делегат на основе этой сигнатуры.
3. Создайте общедоступное событие на основе этого делегата и вызовите, когда условие сработает.
4. Обязательно (где-угодно) подпишитесь на это событие теми методами, которые должны сработать и сигнатуры которых подходят к делегату.
Класс, в котором вы создаете событие (генерируете) называется классом-издателем, а классы, чьи методы подписываются на это событие при помощи "+=" — классами-подписчиками. Запомните! Если Вы не подписались на событие и его делегат пустой, возникнет ошибка. Чтобы избежать этого, необходимо подписаться, или не вызывать событие вообще, как показано на примере (Т.к. событие — делегат, то его отсутствие является «нулевой ссылкой» null).
if (i == 71)
{
if (onCount != null)
{
onCount();
}
}
Вы всегда можете отписаться, используя оператор "-=": <КлассИлиОбъект>.<ИмяСобытия> -= <КлассЧейМетодДолженЗапуститься>.<МетодПодходящийПоСигнатуре>. Преимущество Событий очевидно: классу-издателю, генерирующему событие не нужно знать, сколько классов-подписчиков подпишется или отпишется. Он создал событие для определенных методов, ограничив их делегатом по определенной сигнатуре. События широко используются для составления собственных компонентов управления (кнопок, панелей, и т.д.). У самых маленьких может возникнуть вопрос: что делать, если методы, которые должны сработать имеют входящий параметр (а то и не один!)? Ответ: Все дело в делегате, на котором базируется событие. А точнее сигнатура подходящих для делегата методов. Когда Вы сконструируете делегат, «принимающий» метод с параметром, то (!) при запуске событие запросит этот параметр. Естественно, параметр может быть чем угодно. Пару слов о .NET-событиях. Microsoft упростила задачу конструирования делегатов: .NET предлагает готовый делегат EventHandler и т.н. «пакет» входных параметров EventArgs. Желаете событие? Берете готовый EventHandler, определяетесь в параметрах, «запихиваете» их в класс, а класс наследуете от EventArgs. А дальше — как по расписанию) Многие разработчики утверждают (и я с ними согласен), что главная проблема «недопонимания» событий — их специфическая область применения, а вследствие — мало доступных примеров. Ну и не забывайте о практике. P.S. Если вы не ни разу не использовали делегаты, лучше попробуйте потренироваться на делегатах, а затем попытайтесь понять эту статью. Я надеюсь, что внес небольшое понимание в эту непростую тему. Успехов!
Microsoft .NET Framework – сервисная поддержка (включеная в дистрибутив ОС Windows 7), без которой отказываются работать болш-во сайтов и прог. На сегодняшний день .NET стал для интернета тем же самым, чем сейчас является DirectX для игровой индустрии, а именно — общепризнанным стандартом. DirectX – это прога (набор кодов), без которой игры не будут запускаться.
ASP.NET является единой моделью для разработки веб-приложений, которая содержит службы, необходимые для создания веб-приложений для предприятий. ASP.NET является частью .NET Framework и позволяет в полной мере использовать возможности среды CLR (например, строгая типизация, наследование, взаимодействие языков и отслеживание версий).
Для создания приложений используется Visual Studio - выбирается так же как и WinForms.
ASP.NET юзается со средой разработки Microsoft Visual Web Developer (среда для динамической разработки веб-приложений). Но все возможности Visual Web Developer Express также доступны в Microsoft Visual Studio 2010, так что ASP.NET легко открывается и в VS!
События .NET в деталях ///////////////////////////////////////////////////////////////
Если вы .NET программист, то вы наверняка объявляли и использовали события в своем коде. Несмотря на это, не все знают, как события работают внутри и какие особенности связаны с их применением. В этой статье я попытался описать работу событий как можно более подробно, включая некоторые частные случаи, с которыми редко приходится иметь дело, но про которые важно и\или интересно знать.
