Программирование >>  Программирование с использованием ajax 

1 ... 107 108 109 [ 110 ] 111 112 113 ... 396


Основная функциональная возможность класса Vector состоит в сложении и вычитании векторов с помощью перегруженных операций, для которых здесь требуются лишь некоторые базовые познания в тригонометрии. Важным аспектом в этом коде является то, что в случае выдачи исключения при получении значения свойства Value поля R или ThetaRadians, т.е. в ситуации, когда значением какого-то из них оказывается null, возвращается нулевой вектор:

public static Vector operator +(Vector opl. Vector op2) {

try {

Получение координат (x, у) для нового вектора.

catch

Возвращение нулевого вектора, return new Vector (null, null) ;

Если какая-то из образующих вектор координат равна null, тогда вектор является недействительным, что здесь выражается в возврате Vector со значениями null в обоих полях (R и Theta). В остальной части кода в классе Vector переопределяются другие операции, требуемые для расширения функции сложения так, чтобы она могла выполнять и вычитание, а также переопределяется метод ToString () для получения строкового представления объекта Vector.

Код в Program. CS тестирует класс Vector, предлагая пользователю инициализировать два вектора и затем складывая и вычитая их. В случае не указания пользователем какого-то из значений, оно интерпретируется как равное null, и тогда в силу вступают упоминавшиеся ранее правила.

Пространство имен System.Collections .Generics

Практически в каждом из демонстрировавшихся до сих пор приложений встречались следующие пространства имен:

using System;

using System.Collections.Generic; using System.Linq; using System.Text;

В пространстве имен System содержится большинство из базовых типов, используемых в приложениях .NET. В пространстве имен System.Text находятся типы, касающиеся обработки и кодирования строк. О пространстве имен System.Linq будет рассказываться чуть позже в этой книге, начиная с главы 26. А какие типы предлагает пространство имен System.Collections.Generic и почему оно включается в состав консольных приложений по умолчанию?

Ответ на этот вопрос выглядит так: в этом пространстве имен содержатся обобщенные типы, предназначенные для работы с коллекциями, и оно наверняка будет применяться настолько часто, уже заранее сконфигурировано с оператором using, чтобы его можно было использовать без явного указания его имени.

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



ва имен System. Collections.Generics, о которых пойдет речь в данном разделе. Другие типы из этого пространства имен будут рассматриваться позже в этой главе.

Таблица 12.2. Два типа из пространства имен System. Collections. Generics, рассматриваемые в настоящем разделе

Тип Описание

List<T> Коллекция объектов типа т

Dictionary<K, v> Коллекция элементов типа V, ассоциируемых с ключами типа к

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

Тип List<T>

Вместо того чтобы наследовать класс от CollectionBase и реализовывать необходимые методы, как это делалось в предыдущей главе, гораздо быстрее и легче воспользоваться обобщенным типом коллекции List<T>. Дополнительное преимущество здесь заключается в том, что многие из методов, которые обычно требуется реализовать самостоятельно, вроде Add (), при таком подходе реализуются автоматически.

Для создания коллекции объектов типа Т применяется такой код:

List<T> myCollection = new List<T>();

И все! Ни определять какие-либо классы, ни реализовать какие-либо методы, ни делать еще что-нибудь в подобном роде больше не требуется. Еще можно только задавать начальный список элементов в коллекции, передавая его конструктору List<T>. Объект, экземпляр которого создается с помощью такого синтаксиса, поддерживает методы и свойства, перечисленные в табл. 12.3 (где подразумевается, что типом, предоставляемым обобщению List<T>, является Т).

Таблица 12.3. Методы и свойства List<T>

Член

Описание

int Count

Свойство, предоставляющее информацию о количестве элементов в коллекции

void Add(T item)

Добавляет элемент в коллекцию

void AddRange(IEnumerable<T>)

Добавляет несколько элементов в коллекцию

IList<T> AsReadOnlyO

Возвращает доступный только для чтения интерфейс к коллекции

int Capacity

Получает или устанавливает количество элементов, которое может содержаться в коллекции

void Clear ()

Удаляет все элементы из коллекции

bool Contains (T item)

Определяет, содержится ли элемент в коллекции

void CopyTo(T[] array, int index)

Копирует элементы коллекции в массив array, начиная в массиве с индекса index

IEnumerator<T> GetEnumerator ()

Получает экземпляр lEnumerator<T> для итерации по коллекции. Обратите внимание, что возвращаемый интерфейс является строго типизированным и относится к типу т, поэтому выполнять приведение в циклах foreach не требуется



Окончание табл. 12.3

Член Описание

int IndexOf (Т item) Получает индекс элемента или значение -1. если

данный элемент не содержится в коллекции

void Insert (int index, т item) Вставляет элемент в коллекцию, используя указан-

ный индекс

bool Remove (Т item) Удаляет первое вхождение элемента из коллекции

и возвращает true. Если элемент не содержится в коллекции, тогда возвращает false

void RemoveAt (int index) Удаляет из коллекции тот элемент, индекс которого

соответствует указанному в index

Еще у List<T> есть свойство Item, обеспечивающее подобный массивам доступ:

Т itemAtIndex2 = myCollectionOfT[2];

Этот класс поддерживает еще несколько других методов, но для начала работы это уже слишком много. В следующем практическом занятии демонстрируется применение типа List<T> на примере класса Collection<T>.

gyfgTf.iigffil Применение типа List<T>

1. Создайте новое консольное приложение по имени СЫ2Ех02 и сохраните его в каталоге С: \BegVCSharp\Chapterl2.

2. Щелкните правой кнопкой мыши на имени этого проекта в окне Solution Explorer и выберите в контекстном меню пункт AddiAclcl Existing Item (Добавить=> Добавить существующий элемент).

3. Выберите из каталога C:\BegVCSharp\Chapterll\ChllEx01\ChllEx01 файлы Animal. cs. Cow. cs и Chicken. cs и щелкните на кнопке Add (Добавить).

4. Измените объявление пространства имен в каждом из трех добавленных файлов следующим образом:

namespace Chl2Ex02

5. Измените код в файле Program, cs, как показано ниже:

static void Main(string[] args) {

List<Animal> animalCollection = new List<Animal> () ; animalCollection. Add (new Cow ( Jack )) ; animalCollection. Add (new Chicken ( Vera )) ; foreach (Animal myAnimal in animalCollection) {

myAnimal.FeedO ;

Console.ReadKey();

6. Запустите приложение. Полученный результат должен выглядеть точно так же, как он выглядел в рассмотренном в предыдущей главе приложении ChllEx02.



1 ... 107 108 109 [ 110 ] 111 112 113 ... 396

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика