:: Меню ::

Головна
  • Про сайт
  • Введення
  • Середовище програмування VB .NET: Visual Studio .NET
  • Вирази, оператори і передача управління
  • Класи і об'єкти
  •  Спадкоємство і інтерфейси
  • Обробка подій і делегати
  • Обробка помилок в VB .NET
  • Форми Windows, графічний вивід і друк
  • Уведення-виведення
  •  Багатопотокові застосування
  • Підтримка баз-даних в VB .NET
  • Короткий огляд ASP .NET
  • Складки .NET, установка додатків і COM Interop
  • Книга для гостей
    Контакти
    Добавити у вибране

    :: Друзі ::

     
     

    :: Лічильники ::

    = =

     

     

     

     

    Простори імен

    При використанні коди, написаної іншими програмістами, завжди виникає потенційна небезпека конфліктів імен. Але навіть якщо забути про ці конфлікти, все одно необхідно якимсь чином згрупувати тисячі методів відповідно до їх функціонального призначення. Отже, у величезній бібліотеці класів .NET повинен існувати який-небудь спосіб логічного угрупування інформації. У .NET це завдання вирішується за допомогою просторів імен. Звичайно, ви можете створювати власні простори імен; нижче в цьому розділі ми покажемо, як це робиться.

    У кожному місті є своя Головна Вулиця, а в кожній бібліотеці неодмінно знайдеться метод з ім'ям Open. Простори імен дозволяють розрізняти ці методи. Наприклад, в просторі імен System. 10 зібрані методи для виконання файлових операцій; у нього входить клас Fil е, а в цьому класі є метод Open. Повне ім'я методу виглядає так:

    System.I0.File.Open

    Клас File є частиною простору імен System. I0, тому він не конфліктує з іншим класом File з простору імен Cornell .Morrison.NiftyClasses, який також може містити власний метод Open.

    Імпортування

    Звертаючись до хороших знайомих, ми не називаємо їх по імені-по батькові і прізвищу. У .NET передбачена можливість імпортування просторів імен командою Imports, що дозволяє позбавитися від громіздких повних імен. Після правильної команди Imports всі посилання вигляду

    System.Text.StringBuilder .

    можуть замінюватися простим ім'ям Stringbuilder.

    Простір імен System автоматично імпортується в кожне рішення, створене в Visual Studio. Завдяки цьому методи цього простору імен можуть викликатися у вигляді Console.WriteLine() замість повного імені System.Console.WrlteLlne().

    Список просторів імен, що автоматично імпортуються в рішення, знаходиться на сторінці Imports вікна властивостей рішення (мал. 4.2).

    Завантажите в Object Brewser простір імен Microsoft, що автоматично імпортується. Visual Basic — ви побачите, що воно містить різні функції, що існували в Visual Basic і збережені в VB .NET (мал. 4.3).

    Імпортування простору імен Microsoft. Visual Basic. Constants дозволяє використовувати старі константи VB — такі, як vbcrtf. .NET-версии багатьох констант не мають префікса vb (наприклад, Crlf) і знаходяться в просторі імен

    Microsoft.VIsualBasi з.Control Chars.

    Команда Imports повинна розташовуватися перед рештою всіх оголошень, включаючи оголошення імені модуля, але після директив Option (таких, як Option Strict On або Option Compare Text).

    Мал. 4.2. Сторінка Imports вікна властивостей рішення

    Мал. 4.3. Простір імен Microsoft.VisualBasic у програмі Object Browser

    Команда Imports не збільшує об'єм програми, оскільки вона не включає весь код простору імен в проект, а просто спрощує посилання на члени класів, що входять в простір імен. На швидкість роботи вона теж не впливає. Імпортуються тільки простори імен, що входять в складки, посилання на яких були включені в програму командою Project > Add Reference (складки розглядаються в розділі 13).

    Ми були просто уражені, коли дізналися, що підказка Intellisense працює і для команди Imports — вона виводить список просторів імен, які можна імпортувати в проект. Для цього IDE аналізує складки, посилання на яких є в рішенні.

    Якщо два імпортовані простори імен містять класи з однаковими іменами, то для розрізнення цих класів вам доведеться указувати їх повні імена (VB .NET не дозволяє створити два однойменні класи в одному просторі імен).

    Особлива версія команди Imports використовується для запобігання потенційним конфліктам імен з раніше імпортованими класами. Наприклад, якщо ви захочете працювати на рівні сумісності з колишніми версіями Visual Basic (чого робити не рекомендується), в програмі майже напевно виникнуть конфлікти імен. Включите в програму посилання на рівень сумісності VB, а потім скористайтеся командою вигляду:

    Imports Vb6stuff = Microsoft.VisualBasic.Compatibility.VB6

    Після цього залишається лише починати всі посилання на рівень сумісності з префікса «Vbsstuff.», і всі проблеми з конфліктами імен зникнуть.

    З простору імен не можна імпортувати окремий клас, щоб спростити введення імен його членів. Припустимо, ви хочете імпортувати клас Directoryinfo, щоб спростити введення імен його членів. Але наступна команда недопустима:

    Imports System.IO.Directorylnfo

    Клас Directoryinfo

    Щоб розглянути приклад використання Imports на скільки-небудь нетривіальному прикладі, ми візьмемо клас Directorylnfo з простору імен System. IO. Як підказує само назву, клас Directorylnfo містить методи для отримання інформації про вміст каталогів, виведення повного імені каталога і так далі Одін з конструкторів цього класу отримує рядок з ім'ям каталога, який ви хочете проаналізувати (якщо передане ім'я не є абсолютним, конструктор вважає, що воно задається щодо поточного каталога програми). Правильно написана команда Imports дозволяє замінити довгу команду Dim dirlnfo As New System.IO.Directory!nfo("C:\") компактнішою і зрозумілішою командою

    Dim dirlnfo As New Directoryinfo("C:\")

    Наступна програма виводить список всіх каталогів на жорсткому диску, в її роботі використовуються рекурсія і клас Directorylnfo. Ключову роль в ній грає метод Getdi rectories (), що повертає колекцію підкаталогів. Функція Listdi rectories перебирає вміст колекції і рекурсивно викликається для кожного елементу:

    Option Strict On Imports System.IO Module Modulel

    Sub Main())

    Dim dirlnfo As New Directoryinfo("C:\")

    Listdirectories(dirinfo)

    End Sub

    Sub Listdirectories(Byval thedirectory

    As Directorylnfo)

    Dim tempdir*as Directoryinfo

    Console. Wri.teLi net thedi rectory .Full Name())

    For Each terrain In thedi rectory. Getdi rectories ()

    Listdirectories(tempoir) Next End Sub End Module

    Якщо ви звикли до рекурсивного перебору каталогів з використанням старої функції Dir, ви оціните, наскільки спростив цю програму в .NET чудовий метод Directorylnfo.

    Під час роботи над цим прикладом ми легковажно назвали своє вирішення D1-rectorylnfo. В результаті команда Imports перестала працювати! Причини так і залишилися невідомими, але мораль ясна: не привласнюйте своїм рішенням імена, співпадаючі з іменами класів бібліотеки .NET.

    Довідкова система і .NET Framework

    У бібліотеку .NET Framework входять сотні просторів імен, кожне з яких містить безліч корисних класів. По масштабах і можливостях .NET Framework порівнянна з повним інтерфейсом Win32 API. Бібліотека настільки величезна, що описати її в одній книзі просто неможливо. Хоча цей розділ дає початкове уявлення про деякі класи .NET Framework, якнайскоріше приступайте до читання документації .NET. Почніть з розділу «.NET Framework Class Library» і знайдіть описи просторів імен, що представляють для вас інтерес. Як показано на мал. 4.4, в довідковій системі перераховані всі класи кожного простору імен.

    Кожне ім'я класу в лівому стовпці є гіперпосиланням, ведучою до докладного опису класу. У нижній частині опису класу перераховані імена його членів. Якщо клацнути на будь-якому з цих імен, ви перейдете до докладного опису відповідного члена. Звернете увагу: VB .NET вже не вважається за другорядну мову — синтаксис всіх членів приводиться для VB, VC і С#. На мал. 4.5 показаний приклад документації класу Directorylnfo в бета-версиі 2.

    Щоб отримати докладний опис методу Getdi rectories, використаного в попередньому прикладі, клацніть на посиланні Directorylnfo в нижній частині сторінки, а потім клацніть на посиланні Getdi rectories. Зовнішній вигляд сторінки показаний на мал. 4.6. Деякі терміни, що зустрічаються на цій сторінці (такі, як Pri vate), розглядаються далі в цьому розділі

    Класи колекцій в .NET Framework

    Щоб збудити у вас інтерес .NET Framework, ми коротко розглянемо деякі класи колекцій. У цих класах реалізуються стандартні структури даних, часто використовувані в нетривіальних програмах. Колекції настільки важливі, що вони за умовчанням автоматично імпортуються в кожне вирішення VB .NET (у просторі імен System.Collections).

    Мал. 4.4. Простір імен System.10 в довідковій системі

    В сукупності ці класи залишають далеко позаду примітивний клас Collection з Vb6. Найкорисніші класи колекцій перераховані в таблиці. 4.2. У наступних двох розділах розглядаються основні принципи роботи з двома найважливішими класами: Arraylist і Hashtable. Знайомство з дуже важливим класом Dictio-narybase відкладається до наступного розділу, присвяченого спадкоємству.

    Таблиця 4.2. Основні класи колекцій

    Ім'я класу

    Опис

    Arraylist Динамічний масив, розміри якого збільшуються і зменшуються у міру потреби
    Bitarray Використовується для порозрядних операцій з окремими бітами
    Hashtable Колекція пар «ключ/значення», впорядкована.,по хэш-кодам ключів
    Queue Черга (принцип FIFO, «першим прийшов, першим вийшов»)
    Stack Стік (принцип LIFO, «останнім прийшов, першим в':шел»)
    Dictionarybase Базовий клас для різних асоціативних масивів (словників). У асоціативному масиві зберігаються пари «ключ/значення», і працювати з ними зручніше, ніж з багатьма типами колекцій. Клас Dictionarybase використовується тільки шляхом спадкоємства (див. розділ 5)

    Мал. 4.5. Клас Directoryinfo в довідковій системі

    Arraylist

    Клас Arraylist реалізує динамічний масив, розміри якого автоматично збільшуються і зменшуються у міру потреби. Динамічні масиви працюють трохи повільніше за звичайні масиви, але вони помітно спрощують багато завдань програмування. Крім того, на відміну від більшості масивів клас Arrayli st є гетерогенним, тобто дозволяє зберігати об'єкти різних типів. В розділі 5 буде показано, як створити клас Arraylist для зберігання об'єктів лише одного типу; ви також дізнаєтеся про деякі нюанси, пов'язані із зберіганням узагальнених об'єктів в Arrayli St.

    Використання Arraylist замість базового масиву означає, що вам не доведеться часто викликати Redim Preserve для збереження існуючих даних. Досить викликати метод Add, і клас Arraylist сам виконає всю чорнову роботу. Клас Arraylist містить ряд інших корисних методів. Наприклад, метод Addrange дозволяє перенести в динамічний масив весь вміст існуючого масиву всього однією командою. Після завершення обробки елементи можна скопіювати назад. Зокрема, це дозволяє легко об'єднати вміст двох масивів. У таблиці. 4.3 перераховані основні члени класу Arraylist (повний список приведений в електронній документації).

    Мал. 4.6 . Метод Getdirectories в довідковій системі

    Таблиця 4.3. Найважливіші члени класу Arraylist

    Ім'я

    Опис

    Copy To Копіює об'єкт Arraylist (повністю або частково) в одновимірний масив починаючи із заданого індексу масиву-приймача
    Contains Перевіряє, чи присутній в об'єкті Arraylist заданий елемент
    Clear

    Видаляє всі елементи з об'єкту Arraylist

    Capacity Отримує або задає максимальну кількість елементів, на яку розрахований об'єкт Arraylist. Звичайно, місткість масиву змінюється у міру додавання нових елементів, але з міркувань ефективності місткість нарощується великими «порціями»
    Binarysearch Виконує бінарний пошук заданого елементу у відсортованому динамічному масиві або в його частині
    Addrange

    Дозволяє додати вміст іншого масиву (динамічного або звичайного) в поточний динамічний масив. У поєднанні з методом Insertrange дозволяє швидко об'єднувати масиви з використанням Arraylist як допоміжний клас

    Add
    Додає новий об'єкт в кінець динамічного масиву

    Ім'я

    Опис

    Count

    Повертає кількість елементів, що фактично зберігаються в масиві

    Getrange

    Повертає інший об'єкт Arraylist, що містить послідовність суміжних елементів поточного об'єкту

    Indexof

    Повертає індекс першого входження заданого елементу в динамічний масив. Слід пам'ятати, що індексація в класі Arraylist (як і в звичайних масивах) починається з нуля

    Insert

    Вставляє елемент в задану позицію об'єкту Arraylist

    Insertrange

    Вставляє елементи колекції в об'єкт Arraylist починаючи із заданої позиції

    Item

    Отримує або задає значення елементу, що знаходиться в заданій позиції. Є властивістю за умовчанням для класу Arraylist

    Lastlndexof

    Повертає індекс останнього входження заданого елементу в динамічний масив (індексація починається з нуля)

    Length

    Повертає кількість елементів в динамічному масиві

    Readonly

    Повертає новий об'єкт Arraylist, доступний тільки для читання (перевірка можливості запису в динамічний масив здійснюється методом Isreadonly)

    Remove

    Видаляє з масиву перше входження заданого елементу

    Re move At

    Видаляє елемент, що знаходиться в заданій позиції

    Removerange

    Видаляє послідовність суміжних елементів

    Repeatrange

    Повертає об'єкт Arraylist, що містить задану кількість дублікатів


    одного елементу

    Reverse

    Переставляє елементи в об'єкті Arraylist в протилежному порядку (у всьому масиві або в його частині)

    Setrange

    Копіює елементи колекції поверх інтервалу елементів Arraylist

    Sort

    Сортує елементи в об'єкті Arraylist (у всьому масиві або в його частині)

    Toarray

    Копіює елементи з об'єкту Arraylist в масив

    Trimtosize

    Використовується після завершення операцій з об'єктом Arraylist; місткість динамічного масиву зменшується до фактичної кількості елементів, що зберігаються в нім зараз (зрозуміло, пізніше масив знову може збільшитися)

    Серед властивостей класу Arraylist найбільший інтерес представляє властивість Item, яка представляє елемент із заданим індексом. Приклад:

    Consolе.WriteLinediiyList.Item( 1))

    Властивість Item є властивістю за умовчанням класу Arraylist. Це означає, що при використанні його ім'я може не указуватися, Наприклад, приведена вище команда еквівалентна наступній команді:

    Console. Writeline(mylist(1))

    У розділі «Властивості» справжнього розділу ви дізнаєтеся, чим відрізняються властивості за умовчанням в VB .NET і колишніх версіях VB.

    У наступному короткому прикладі масив Arrayli st використовується для введення і збереження невідомої кількості рядків. При цьому вдається обійтися без команди Redim Preserve, необхідної при роботі із звичайними масивами.

    Option Strict On Module Modulel

    Sub Main()

    Dim mylist As New Arraylist()

    Dim thedata As String

    Console.Write("Please enter each item and hit Enter key,"_

    & "enter ZZZ when done:") thedata =Console.ReadLine()

    Do Until thedata ="ZZZ" mylist.Add(thedata)

    Console.WriteC'Please enter each item and hit Enter,"_

    & "enter ZZZ when done:") thedata =Console.ReadLine() Loop

    Console.WriteLine("You entered "Smylist.Count() & "ITEMS.")

    Console.ReadLine()

    End Sub

    End Module

     




    :: Наша кнопка ::

    Отримати код:

    Підтримайте наш сайт і розмістіть нашу кнопку на своєму ресурсі.


    :: Реклама ::

    Скачати безкоштовно програму Microsoft Front Page 2003


    :: Посилання ::

    -


     

     

     


    Copyright ©