дані класу при створенні екземпляр. У результате про єкт створювався в невизначенності стані, что підвіщувало вірогідність помилок и прімушувало програміста прійматі додаткові заходь обережності при роботі з про єктами. Для вирішенню цієї проблеми в VB.NET з'явилися конструктори, что параметрізуваліся.
Іншім недоліком булу відсутність повноцінного спадкоємства. Спадкоємством назівається особлива форма багатократно использование коду, при Якій програміст візначає Нові про єкти на базі існуючіх про єктів. Спадкоємство Дуже добре Підходить для таких Завдання, як создания нового текстового поля з Розширене можливіть на підставі стандартного текстового поля. У VB версій 5 и 6 спадкоємство НЕ підтрімувалося, того для побудова поліпшеного текстового поля доводи удаватіся до услуг незручної и ненадійної програми-майстри (wizard).
Розглянемо Інший приклад, в якому Було б Доречний спадкоємство, - створення класів для роботи Із спеціалізованімі колекціямі. Щоб создать колекцію, что спеціалізувалася на зберіганні строкових даних, в VB5 и 6 в клас включаються закрите поле: mCollection As Collection
У обробніках подій Initialize и Terminate відбувалося віділення и звільнення пам'яті, вікорістовуваною закритою колекцією. Потім програмуваліся методи спеціалізованої Колекції, прізначені для зовнішнього использование. Більшість таких методів зводу до простого виклику відповідного методу закрітої Колекції, Наприклад: Add (Item As String) .Add ItemSub
Альо найосоружніше починалося у тому випадка, если вміст Колекції Вимагаю перебирати в ціклі For Each. Для цього в модуль класу доводи включать фрагменти увазі: Function NewEnum As lUnknownNewEnum=mCollection. [_ NewEnum] Function
Альо и Це не усьо - Цій Функції слід Було прісвоїті Ідентифікатор! Принцип абракадабра - дістаємо з Капелюха кролика raquo ;! хороший для фокусника, но не для програміста. При вікорістанні спадкоємства уся ця нісенітніця НЕ потрібна. У VB.NET й достатньо Написати: MyCollectionCollection
... і ві отрімуєте автоматичності підтрімку For Each.
У програмістів, что Працюють на Visual Basic, всегда вінікалі проблеми з виток пам яті Із-за так званні ціклічніх ПОСИЛАННЯ (ситуация, при Якій про єкт А посілається на про єкт В, а про raquo ; єкт У посілається на про єкт А). Если з'явиться ціклічніх ПОСИЛАННЯ булу обумовлена ??логікою програми, компілятор VB НЕ розпізнавав їх, внаслідок чого пам ять, Займана цімі об'єктами, що не звільнялася.
Система розборки сміття, вбудована в .NET CLR, вірішує проблему ціклічніх ПОСИЛАННЯ інакше - інтелектуальний алгоритм віявляє ціклічні ПОСИЛАННЯ, розріває їх и звільняє займаною пам'ять. Звічайна, за додаткові возможности доводитися платіті.
Розглянемо Ширшов возможности колекцій, оскількі без їх использование написання коду для алгоритмів з використанн графів становится, м яко Кажучи, скрутнім. Колекція є набором елементів одного або різніх тіпів. Зазвічай Колекції складають з елементів управління, других про єктів. Колекція и сама є об'єктом. Колекції всеїдні, смороду дозволяють мати в одному наборі и кнопку, и мітку, и рядок, и змінну величину типом Integer.
Простір імен System.Collections бібліотеки .NET Framework містіть інтерфейси и класи, Які визначаються Різні Колекції об'єктів, Такі як списки, Черги, двійкові масива, хеш-таблиці и словники. Колекції настолько Важливі, что смороду за умовчанням автоматично імпортуються в шкірних решение VB .NET.
У сукупності ЦІ класи залішають далеко позаду прімітівній клас Collection з VB6. Найкорісніші класи колекцій перераховані в табліці 3.1.
Детальніше розглянемо основні принципи роботи з двома найважлівішімі класами: ArrayList и HashTable.
Клас ArrayList реалізує Динамічний масив, розміри которого автоматично збільшуються и зменшуються у міру спожи. Дінамічні масивов Працюють немного повільніше за звічайні масива, альо смороду помітно спрощують много Завдання программирования. Крім того, На Відміну Від більшості масівів клас ArrayList є гетерогенним, тобто дозволяє зберігаті об'єкти різніх тіпів.
Таблиця 3.1 - Основні класси колекцій
Ім я класуОпісArrayListДінамічній масив, розміри которого збільшуються и зменшуються у міру потребіBitArrayВікорістовується для порозрядно операцій з окремим бітаміHashtableКолекція пар ключ/значення raquo ;, впорядкована за хеш-кодами ключівQueueЧерга (принцип FIFO, Першів прийшов, Першів Вийшов ) StackСтік (принцип LIFO, останнім прийшов, дере Вийшов ) DictionaryBaseБазовій клас для різніх асоціатівніх масівів (Словників). У асоціатівному масиві зберігаються парі ключ/значення raquo ;, и працювати з ними зручніше, чем з б...