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

С# - Ватсон К.

Ватсон К. С# — Лори, 2005 . — 879 c.
ISBN 1-861004-98-2
Скачать (прямая ссылка): vatsonc2005.pdf
Предыдущая << 1 .. 109 110 111 112 113 114 < 115 > 116 117 118 119 120 121 .. 404 >> Следующая


(

Dictionary ranimallDl = valuej

)

)

>

Вот какие различия имеются между этими членами:

? Add о принимает два параметра: ключ и значение, которые будут храниться совместно. У данного семейства, построенного

по алфавитному принципу, есть член с именем Dictionary, наследуемый от класса DictionaryBase. Он является интерфейсом iDictionary, имеющим собственный метод Add<) с двумя параметрами типа object, Наша реализация предусматривает передачу значения тнпа string в качестве ключа и передачу объекта тнпа Animal.

? Remove!) получает в качестве параметра ключ, а не ссылку на объект. Элемент, обладающий значеннем, заданным с помощью ключа, удаляется.

? Индексатор использует вместо индекса значение ключа в виде строки, что позволяет осуществлять доступ к хранящемуся элементу

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

Еще одним отличием семейств с базовым классом DictionaryBase от семейств с базовым классом CollectionBase является то. что для ннх немного по-разному выполняется конструкция foreach. Семейство из предыдущего раздела допускает непосредственное извлечение объектов тнпа Animal. Использование конструкции Coreach с классом, производным от DictionaryBase, приводит к получению структур типа DictionaryEntry — еще одного тнпа, описанного в пространстве имен System,Collections. Для того чтобы добраться до самих объектов типа Animal, необходимо воспользоваться членом этой структуры value, хотя для получения доступа к соответствующему ключу можно также использовать член данной структуры кеу. Теперь использовавшемуся ранее коду:

foreach (Animal myAnimal in animalCollection)

( •

Conaole.WriteLine(*New (0) object added to custom collection, ' +

'Name = Cl}", myAnimal. ToStringO , my Animal, Name ());

}
Дополнительные сведения о классах___________________________________________________________241

будет эквивалентен следующий код:

foreacb (DictionaryEntry щуEntry in animalCollection)

<

Console.WriteLine("New (0} object added to custom collection, * +

'Name = (ljr, myEntry. Value. ToStringO ,

((AnimalJmyEntry.Value).Name); ¦

На самом деле можно переопределить это поведение таким образом, чтобы извлекать объекты непосредственно с помощью конструкции foreach, однако данная тема чрезвычайно сложна, и мы ее рассматривать не будем.

Посвященная этому вопросу статья Карли Ватсона опубликована на web-сайтв csharpToday. сот.

Усовершенствование CardLib, часть 1

В предыдущей главе был создан проект библиотеки классов под названием chlocardLib, в котором содержался класс Card, представляющий игральные карты, и класс Deck, представляющий колоду карт, т. е, являющийся семейством объектов класса Card. Это семейство было реализовано в виде простого массива.

Теперь добавим в эту библиотеку, которую переименуем в chiicardLib, еще один класс. Этот новый класс — назовем его cards — будет представлять созданное пользователем семейство объектов типа card, что позволит использовать преимущества, о которых рассказывалось в данной главе. Код, описывающий этот класс, находится в файле carde.es и имеет следующий вид (изменения в коде, созданном мастером, выделены серым цветом):

using System;

using System.Collections;

namespace Chi1CardLib {

III <summary>

III Summary description for Cards.

III </summary>

public class Cards i CollectionBase

< __ ________

public void Add (Card newCard)

(

List.Add(newCard);

)

public void Remove (Card oldCard) t 4 List.Remove(oldCard};

)

public Cards()

public Card thislint cardlndex]

t

get

< \

return (Card)List{cardlndex]i

}

set -

{

List[cardlndex] = value;

1

)
242

Глава 11

// Проверка., позволяющая определять, содержится ли в семействе // Coxda конкретная карте. С этой цель» осуществляется вызов метода // Contains класса ArrayList для данного семейства, доступ к U хоторону осуществляется посредством mnerLlet. public bool Contains (Card card)

(

return XnnerList.Contains(card)i

}

>

Теперь нам предстоит внести определенные изменения в файл Deck.cs, чтобы он мог использовать это новое семейство вместо массива:

using System; namespace ChllCardLib {

public class Deck

private Cards cards = new Cards ();

public DeckO

... . , ...........................................

TJ здесь располагалась удаленная строи кода, for (int suitval = 0; suitVal < 4; suitVal++)

(

for (int rankVal - 1; rankVal < 14; rankVal++)

cards. Add (new Card( (Suit) suitval, (Bank) rankVal)) t

>

}

)

public Card GetCard(int cardNum)

{

if (cardNum >•= О ЬЬ cardNum <= 51) return cards[cardNum]; else

throw (new System.ArgumentOutOfRangeException('cardNum', cardNum, 'Значение должно находиться в диапазоне между 0 и 51. '));

)

public void Shuffled

Cards newOecV » new Cards (); bool() assigned ~ new bool[52]; for (int i = 0; i < 52; i++)

Ш . int aourceCard = 0;
Предыдущая << 1 .. 109 110 111 112 113 114 < 115 > 116 117 118 119 120 121 .. 404 >> Следующая
Книги
Web-программирован-
ие
Аппаратное обеспечение Графика Руководство по П.О. Самоучитель Теория программирования Фотошоп Языки программирования
Новые книги
Вирт Н. "Систематическое программирование " (Теория программирования)

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

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

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

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