Пространства имен. Импортирование. Класс DirectoryInfo.
Особая версия команды 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. Ключевую роль в ней играет метод GetDirectories (), возвращающий коллекцию подкаталогов. Функция ListDirectories перебирает содержимое коллекции и рекурсивно вызывается для каждого элемента:
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. WriteLinet theDi rectory.Full Name()) For Each terrain In theDi rectory. GetDi rectories () ListDirectories(tempOir) Next End Sub End Module
Если вы привыкли к рекурсивному перебору каталогов с использованием старой функции Dir, вы оцените, насколько упростил эту программу в .NET замечательный метод Directorylnfo.
Примечание
Во время работы над этим примером мы легкомысленно назвали свое решение Directorylnfo. В результате команда Imports перестала работать! Причины так и остались неизвестными, но мораль ясна: не присваивайте своим решениям имена, совпадающие с именами классов библиотеки .NET.