Языки

» Html
» Java Script

» PHP

» Perl

» ASP

» CGI

» Xml

» Dhtml

» VBScript

» Java

» Css

Уроки

» Photoshop

» Corel Draw

» Dreamwawer

» Flash MX

Скачать

» Программы

» Книги

Шаблоны

» Сайтов

» Flash

» Скрипты

Active Server Pages

» ASP для новичков

     » Главная страница

     » ASP для новичков

Массивы и коллекции

Все мы знакомы с понятием массивов. Это просто совокупности переменных одного типа, объединенных одним именем. Доступ к конкретному элементу массива производится при помощи указания его порядковых номеров.

В Visual Basic.NET массивы объявляются точно так же, как и обычные переменные. Отличает их только указание размера массива. То есть, если мы хотим объявить целочисленный массив, содержащий десять элементов, следует воспользоваться следующей конструкцией:

Dim my_array(10) As Integer

Естественно, разработчик не ограничен одномерными массивами. Язык Visual Basic .NET позволяет создавать многомерные массивы. При этом программист может использовать для своих массивов до тридцати двух измерений. Обычно этого количества более чем достаточно. Если же вам необходимы массивы с большей степенью размерности, то либо вы несколько неправильно спроектировали свое приложение, либо вы — гений, который в состоянии свободно оперировать более чем тридцатью двумя измерениями. Правда, далеко не факт, что с обработкой подобного массива легко справится ваша система.

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

Dim my_array(10,10) As Integer

Как мы знаем, все языки, входящие в семейство Microsoft .NET, должны действовать практически одинаково, чтобы создавать идентичный runtime-код. А у языков Visual Basic и C++ есть одно коренное различие в обработке массивов. В C++ нумерация элементов массива начинается с нуля, а в Visual Basic — с единицы. Корпорация Microsoft пошла на серьезный шаг и объявила, что теперь в языке Visual Basic .NET элементы массивов нумеруются с нуля. Честно говоря, меня это известие обрадовало, так как для меня язык С является "родным", и нумерация с нуля кажется мне более естественной. Той же самой точки зрения придерживаются многие разработчики, до знакомства с Visual Basic работавшие с языками C++ или Pascal. На самом деле, такая нумерация более органична для компьютерных систем.

Однако этот, вне сомнения, "дерзкий и революционный" шаг Microsoft практически "убил" совместимость языка Visual Basic .NET с программами, разработанными на старых версиях языка Visual Basic. Теперь не получится просто перекомпилировать их в новой среде разработки, так как фактически у массивов получится на один элемент меньше, чем ожидали разработчики. Поэтому, чтобы не потерять совместимость с ранее написанными программами, было принято следующее "соломоново" решение. Массивы действительно нумеруются с нуля, но при этом, в момент объявления массива им автоматически добавляется по одному дополнительному элементу по всем измерениям. Таким образом, действительно достигается совместимость со старыми программами, и в то же время предоставляется возможность разработчикам при создании новых приложений пользоваться нумерацией элементов массива с нуля.

Язык Visual Basic .NET предоставляет возможность переобъявить массив в процессе работы программы, изменив его размеры. Сама идея переобъявления массива явно необычна для стиля программирования последних лет, она, скорее, унаследована из начала истории языка Visual Basic. Однако такая возможность есть, поэтому нам следует знать, как использовать ее.

Для переобъявления массива используется ключевое слово Re Dim. Процедура изменения размеров массива выглядит приблизительно следующим образом:

Dim my_array(10,10) As Integer

...

ReDim my_array(10,20)

После выполнения директивы ReDim размер массива my_array по второму измерению будет увеличен вдвое. При этом необходимо осознавать, что мы можем изменить лишь объем массива, но не его тип или количество измерений массива. Также по умолчанию при переобъявлении массива значения его элементов теряются. Если же необходимо сохранить их, следует использовать ключевое слово Preserve. В этом случае процедура переобъявления размеров массива будет выглядеть следующим образом:

Dim my_array(10,10) As Integer

...

ReDim Preserve my_array(10, 20)

Следует также помнить, что при создании любого массива, он автоматически становится объектом. Да, в объектной иерархии Visual Basic .NET существует объект System.Array, и любой массив является экземпляром данного класса. Никто не заставляет разработчика относиться к массиву как к классу, и применять соответствующие свойства, методы и приемы программирования, но в определенных ситуациях есть смысл воспользоваться массивом как объектом. Полное рассмотрение методов и свойств объекта System.Array находится в разделе, посвященном объектной иерархии языка Visual Basic .NET.

Альтернативой массивам данных с жестко заданными размерами являются так называемые "коллекции". Это просто набор однотипных элементов.

У коллекций нет жестко заданных размеров, и они изначально являются объектами. Поэтому объявление коллекции не обойдется без ключевого слова New, при помощи которого выделяется память под те или иные экземпляры различных классов, т. е. стандартное объявление коллекции будет выглядеть следующим образом:

Dim my_col As New Collection ( )

Видно, что при объявлении мы не указываем тип элементов коллекции. Этот тип будет определен автоматически, как только будет добавлен к коллекции ее первый элемент. Добавление элемента к коллекции производится при помощи метода Add, а удаление элемента при помощи метода Remove. Пример работы с этими методами приведен в следующем фрагменте кода:

my_col.Add(New my_object, "Пустой элемент")

my_col.Remove(1)

Теперь разберем этот фрагмент кода. Метод Add, как мы видели, получает два параметра. Мы добавляем в коллекцию переменную my_object, которая на самом деле является объектом. Более того, этот экземпляр объекта не был инициализирован, и для него не была выделена память. Поэтому мы в качестве первого параметра метода Add, используем связку наименования экземпляра объекта и ключевого слова New, которое заставляет систему выделить требуемый объем памяти. Таким образом, мы добавляем в коллекцию новый пустой экземпляр объекта.

Второй параметр метода Add является текстовой строкой, которая описывает добавляемый элемент. Дело в том, что доступ к отдельным элементам коллекции может производиться как по их номеру, так и по текстовому описанию. Естественно, текстовые описания различных элементов коллекции не должны совпадать.

Вторая строка рассматриваемого фрагмента кода содержит метод Remove, при помощи которого удаляется какой-либо элемент коллекции. В качестве параметра данному методу передается либо порядковый номер удаляемого элемента, либо его текстовое описание. В нашем случае мы удаляем первый элемент коллекции. Необходимо помнить, что нумерация элементов коллекции начинается с единицы, а не с нуля, как у элементов массива.

Для доступа к конкретному элементу коллекции следует воспользоваться методом item. В качестве параметра данному методу может передаваться порядковый номер требуемого элемента коллекции или его текстовое уникальное описание. Использование данного метода показано в следующем фрагменте кода:

t=my_col.Item(1)

Данная операция присваивает переменной t значение первого элемента коллекции. Излишне напоминать, что типы переменной и элемента коллекции должны совпадать. Впрочем, метод item используется для коллекций по умолчанию, поэтому предыдущая операция может быть записана следующим образом:

t=my_col(1)

Обработку всех элементов коллекции удобнее всего производить при помощи цикла For Each. Однако можно воспользоваться стандартным циклом For, если знать количество элементов в коллекции. Это количество хранится в свойстве count. Естественно, это свойство имеет статус "только для чтения".

Сохранить документ

Сохранить документ (.doc)

Распечатать документ

Напечатать

 

Следующий урок


Общение
» Чат

» Форум

Реклама 

Здесь может быть Ваша реклама

Поиск

» Поиск

Статистика 



Связь
» Web дизайнер

» Ваша реклама

» Отзывы

» О проекте

 



Сайт управляется системой uCoz