Компьютерные книги
Главное меню
Главная Поиск по сайту Добавить материал О нас Карта книг Карта сайта
Реклама
computersbooks.net -> Добавить материал -> Языки программирования -> Ватсон К. -> "С#" -> 130

С# - Ватсон К.

Ватсон К. С# — Лори, 2005 . — 879 c.
ISBN 1-861004-98-2
Скачать (прямая ссылка): vatsonc2005.pdf
Предыдущая << 1 .. 124 125 126 127 128 129 < 130 > 131 132 133 134 135 136 .. 404 >> Следующая


Прежде чем продолжить движение вперед, следует обратить внимание на то, что результатом выполнения данного примера будут, скорее всего, пары событий, сгенерированных двумя объектами connection. Такая ситуация возникает благодаря способу, с помощью которого происходит генернрацня случайных чисел классом Random. В момент создания экземпляра объекта типа Random используется некоторое начальное значение. Оно применяется для получения последовательности псевдослучайных чисел с помощью некоторой сложной функции. (Компьютеры не имеют возможности создавать действительно случайные числа.) Можно задавать начальное значение в конструкторе экземпляра Random, однако если он не используется (как в настоящем примере), то в качестве начального значения используется текущее время. Поскольку мы создаем экземпляры и начинаем использовать оба наших обьекта connection в последовательных строках кода, то это с большой

о rMtMUMtiuriUcbOgf' UiJj'tKti Iс

I ii** и;;»' in:'

Clti-khiui^i II is i* iiMii r • .r.

CJio-c h I:' ftj* п-TiU ni> ¦: ¦.. ¦¦ e.

№713ago ¦sv-i’i.vo•:! frrn; lii'-f rovv. r -Hi.-::- t'jci I l-ii I ; N i: i i: .**,11 -, Г ChuxMn-j Г.-а-1* nvit ni:: п-ид-...

Cochin-! I ur

Cirttfikin^] notr i и -- ..i v.'7-

CmT k iH‘j S'Oj* ||.ч.> I,. L-__

<+V.' ve.»a с i ышг л f ro tt - i1 ir . I caniW t-r i н.ч .

ri. - iлjiи h I : III-1 list Hi-i'

ij|ies.1i«na Iiji- |i4i» >¦ .--.,1 _

Rc-licrti I run : i i ¦ I". i i ь-Пецп-г. t (idi I .

П-: v | ii T- ¦ r - 11 - - ! :>> Hi- i+

I'JinCMlTiJ f nr II-С м Ml-

tJKJCl, i#v*| г" I-.*.* i il¦ -.¦ I ¦ . -. .3 11

iri|| for in >i i ! iji,.,|l:-: .

Ci»’c !¦.л й-y f r‘ i • ¦ ¦

'.¦|:|-ь-!-..1|>5 |i Ol' I — ¦¦>.* i

Cli-nckarvu fur ntii ri,--dlif i !i H»!j; s4n- ii V’-ip CjMT Ckiinj I tt\~ |i c -,f rV- П Z f4ij i‘ <

Cllf’d.1 far* uriv :i л \

tMw.C k l «*' |sns> ПГ t r.,! ifi' v ..

Щ

J
278

Глава 12

вероятностью может привести к тому, что при реакции на наступление событий Timer.Elapsed ими будут использоваться одни и те же начальные значения, поэтому в том случае, когда один из объектов отправляет свое сообщение, второй, вероятнее всего, будет отправлять свое. Это прямое следствие высокой скорости обработки инструкций, и, для того чтобы обойти эту ситуацию, необходимо задавать начальные значения каким-то другим способом. Одно нз возможных решений, которое здесь не будет реализовываться, заключается в том, чтобы использовать единственный экземпляр класса Random, доступный нз обоих объектов Connection. В таком случае оба этих объекта будут использовать одну н ту же последовательность случайных чисел, поэтому одновременная отправка сообщений окажется маловероятной.

Возвращаемые значения и обработчики событий

Все обработчики событии, рассматриваемые до настоящего момента, обладали возвращаемым типом void. Существует возможность задавать для события тнп возвращаемого значения, однако это может привести к некоторым проблемам, которые связаны с тем, что наступление некоторого события может приводить к вызову нескольких обработчиков. Если каждый из вызванных обработчиков будет возвращать какое-либо значение, то становится непонятным, какое именно возвращаемое значение будет получено.

В системе эта проблема решается таким образом, что доступным оказывается только последнее возвращаемое обработчиком значение, и это будет значение, возвращаемое обработчиком, который последним подписался на данное событие.

Вероятно, существуют ситуации, когда такая функциональная возможность окажется полезной, хотя авторам так н не удалось придумать ни одной такой ситуации. Рекомендуется использовать обработчики событий типа void н избегать параметры типа out.

Расширение и использование CardLib

Теперь следует внести некоторые дополнения в библиотеку классов, созданную в предшествующей главе,— chiicardLib, Будет использоваться проект по созданию библиотеки классов с именем chi2cardLib, в котором изначально находится код, идентичный коду в chiicardLib (не считая того, что в нем используются имена из пространства имен chl2cardbib вместо chiicardLib).

Событие, которое мы собираемся включить в библиотеку, будет генерироваться в тот момент, когда последний объект Card получается в объекте Deck с помощью метода GetCard(), после чего инициируется наступление события LastCardDrewn (последняя сданная карта). Это событие позволит подписчикам автоматически перетасовывать колоду, уменьшая объем вычислений, которые приходится выполнять клиенту. Делегат, определенный для данного события (LaatcardDrownHandler), должен передавать ссылку на соответствующий объект Deck, для того чтобы обработчик мог иметь доступ к методу shuffle о независимо от своего местонахождения:

namespace Chl2CardLib i

public delegate void LaetCardDrawnHandler(Deck curientDeck);
События

279

Код, который используется для определения и генерирования события, весьма прост:

public event LastCardDrawnHandler LaetCardDrawn; public Card GetCard(int cardNum)

{

if (cardNum >= 0 && cardNum <= 51)
Предыдущая << 1 .. 124 125 126 127 128 129 < 130 > 131 132 133 134 135 136 .. 404 >> Следующая
Книги
Web-программирован-
ие
Аппаратное обеспечение Графика Руководство по П.О. Самоучитель Теория программирования Фотошоп Языки программирования
Новые книги
Вирт Н. "Систематическое программирование " (Теория программирования)

Эком "Microsoft Excel 2000 шаг за шагом Русская версия самоучитель " (Самоучитель)

Поляков А.Ю. "Методы и алгоритмы компьютерной графики в примерах Vizual C++" (Графика)

Баяковский Ю.М. "Графическая библиотека Open GL " (Графика)

Валиков А. "Технология " (Языки программирования)
Авторские права © 2013 ComputersBooks. Все права защищены.