Файл подключаемого модуля в vb имеет расширение
Аннотация: В этой лекции вы узнаете, как объявлять и использовать открытые переменные. Вы также узнаете, как создавать ваши собственные процедуры, и как вызывать их. Полученные вами при этом навыки будут особенно полезны при создании больших программных проектов
В этой лекции вы узнаете, как:
- создавать стандартные модули;
- объявлять и использовать открытые переменные с глобальной областью видимости;
- создавать пользовательские функции и процедуры, в целом известные как подпрограммы;
- вызывать пользовательские процедуры .
Изучив программы и выполнив упражнения из лекций с "Открытие и запуск программы в Visual Basic .NET" по "Перехват ошибок с помощью структурной обработки ошибок" , вы спокойно можете назвать себя средним программистом на Visual Basic . Вы изучили основы программирования на Microsoft Visual Basic . NET , и у вас есть навыки, необходимые для создания полезных утилит. В части 3 этой книги вы узнаете, как писать более сложные программы на Visual Basic . Начнем с изучения того, как создавать стандартные модули .
Стандартный модуль - это отдельная часть программы, которая содержит глобальные, или открытые, переменные и процедуры типа Function и Sub . В этой лекции вы узнаете, как объявлять и использовать открытые переменные. Вы также узнаете, как создавать ваши собственные процедуры, и как вызывать их. Полученные вами при этом навыки будут особенно полезны при создании больших программных проектов.
Комментарии
Module Оператор определяет ссылочный тип, доступный в пределах его пространства имен. Модуль (иногда называемый стандартным модулем) аналогичен классу, но с некоторыми важными различиями. Каждый модуль имеет ровно один экземпляр и не требует создания или назначения переменной. Модули не поддерживают наследование или реализуют интерфейсы. Обратите внимание, что модуль не является типом в том смысле, что класс или структура — нельзя объявить программный элемент для типа данных модуля.
Можно использовать Module только на уровне пространства имен. Это означает, что контекст объявления для модуля должен быть исходным файлом или пространством имен и не может быть классом, структурой, модулем, интерфейсом, процедурой или блоком. Модуль нельзя вложить в другой модуль или в любой тип. Дополнительные сведения см. в разделе Контексты объявления и уровни доступа по умолчанию.
Модуль имеет то же время, что и программа. Так как все его члены все Shared же, они также имеют время существования, равное значению программы.
Модули по умолчанию имеют доступ Friend . Уровни доступа можно изменить с помощью модификаторов доступа. Дополнительные сведения см. в разделе уровни доступа в Visual Basic.
Все члены модуля являются неявными Shared .
Parts
attributelist
Optional. See Attribute List.
accessmodifier
Optional. Can be one of the following:
name
Required. Name of this module. See Declared Element Names.
statements
Optional. Statements which define the variables, properties, events, procedures, and nested types of this module.
End Module
Terminates the Module definition.
Правила
Модификаторы. Все члены модуля неявно являются общими. Нельзя использовать Shared ключевое слово при объявлении члена, и изменить общее состояние любого члена нельзя.
Цепочк. Модуль не может наследовать ни от какого типа Object , от которого наследуют все модули. В частности, один модуль не может наследовать от другого.
Нельзя использовать инструкцию Inherits в определении модуля, даже для указания .
Свойство по умолчанию. В модуле нельзя определить свойства по умолчанию. Дополнительные сведения см. в разделе Default.
Behavior
Access Level. Within a module, you can declare each member with its own access level. Module members default to Public access, except variables and constants, which default to Private access. When a module has more restricted access than one of its members, the specified module access level takes precedence.
Scope. A module is in scope throughout its namespace.
The scope of every module member is the entire module. Notice that all members undergo type promotion, which causes their scope to be promoted to the namespace containing the module. For more information, see Type Promotion.
Qualification. You can have multiple modules in a project, and you can declare members with the same name in two or more modules. However, you must qualify any reference to such a member with the appropriate module name if the reference is from outside that module. For more information, see References to Declared Elements.
Поведение
Уровень доступа. Внутри модуля можно объявить каждый элемент с собственным уровнем доступа. Члены модуля по умолчанию имеют открытый доступ, за исключением переменных и констант, которые по умолчанию имеют частный доступ. Если модуль имеет более ограниченный доступ, чем один из его членов, приоритет имеет указанный уровень доступа к модулю.
Область. Модуль находится в пределах пространства имен.
Областью действия каждого члена модуля является весь модуль. Обратите внимание, что все члены проводят продвижение по типам, что приводит к повышению уровня их области до пространства имен, содержащего модуль. Дополнительные сведения см. в разделе повышение типа.
Квалификацию. В проекте может быть несколько модулей, и члены с одинаковыми именами можно объявить в двух или более модулях. Однако необходимо определить любую ссылку на такой элемент с соответствующим именем модуля, если ссылка находится за пределами этого модуля. Для получения дополнительной информации см. References to Declared Elements.
Declares the name of a module and introduces the definition of the variables, properties, events, and procedures that the module comprises.
Classes and Modules
These elements have many similarities, but there are some important differences as well.
Terminology. Previous versions of Visual Basic recognize two types of modules: class modules (.cls files) and standard modules (.bas files). The current version calls these classes and modules, respectively.
Shared Members. You can control whether a member of a class is a shared or instance member.
Object Orientation. Classes are object-oriented, but modules are not. So only classes can be instantiated as objects. For more information, see Objects and Classes.
Классы и модули
У этих элементов много сходства, но есть и некоторые важные отличия.
Терминология. в предыдущих версиях Visual Basic распознаются два типа модулей: модули классов (cls-файлы) и стандартные модули (файлы. bas). Текущая версия вызывает эти классы и модулисоответственно.
Общие члены. Можно контролировать, является ли член класса общим или членом экземпляра.
Объектная ориентация. Классы являются объектно-ориентированными, но модули — нет. Таким образом, можно создавать экземпляры только классов в виде объектов. Дополнительные сведения см. в разделе объекты и классы.
Remarks
A Module statement defines a reference type available throughout its namespace. A module (sometimes called a standard module) is similar to a class but with some important distinctions. Every module has exactly one instance and does not need to be created or assigned to a variable. Modules do not support inheritance or implement interfaces. Notice that a module is not a type in the sense that a class or structure is — you cannot declare a programming element to have the data type of a module.
You can use Module only at namespace level. This means the declaration context for a module must be a source file or namespace, and cannot be a class, structure, module, interface, procedure, or block. You cannot nest a module within another module, or within any type. For more information, see Declaration Contexts and Default Access Levels.
A module has the same lifetime as your program. Because its members are all Shared , they also have lifetimes equal to that of the program.
Modules default to Friend access. You can adjust their access levels with the access modifiers. For more information, see Access levels in Visual Basic.
All members of a module are implicitly Shared .
Rules
Modifiers. All module members are implicitly Shared. You cannot use the Shared keyword when declaring a member, and you cannot alter the shared status of any member.
Inheritance. A module cannot inherit from any type other than Object, from which all modules inherit. In particular, one module cannot inherit from another.
You cannot use the Inherits Statement in a module definition, even to specify Object.
Default Property. You cannot define any default properties in a module. For more information, see Default.
Работа со стандартными модулями
Когда вы будете писать длинную программу, у вас, скорее всего, будет несколько форм и процедур событий, которые используют одни и те же переменные и процедуры. По умолчанию переменные локальны для процедуры события, что означает, что они могут быть прочитаны и изменены только в той процедуре события, в которой они созданы. Вы также можете объявить переменные в верхней части программного кода формы и присвоить переменным более широкую область видимости , распространяющуюся на всю форму. Однако если вы создаете в проекте несколько форм, переменные, объявленные в верхней части формы, будут доступны только в той форме, в которой они объявлены. Точно также, процедуры событий по умолчанию объявляются как частные ( private ) и являются локальными для той формы, в которой они созданы. Например, нельзя вызвать процедуру события Button1_Click из второй формы с именем Form2 , если процедура события объявлена в Form1 как частная.
Примечание. О том, как добавлять в проект дополнительные формы, речь пойдет в "Управление формами Windows" .
Чтобы сделать переменные и процедуры доступными для всех форм и процедур событий проекта, их можно объявить в одном или нескольких стандартных модулях проекта. Стандартный модуль, или модуль кода, - это специальный файл с расширением .vb. Он содержит переменные и процедуры, которые могут быть использованы в любом месте программы. (В предыдущей версии Visual Basic модули имели расширение . bas .) Точно так же, как и в случае с формами, стандартные модули показаны в Solution Explorer (Обозреватель решений) отдельно, и стандартный модуль может быть сохранен на диск с помощью команды Save Module1 As (Сохранить Module1 как) из меню File ( Файл ) . Однако, в отличие от форм, стандартные модули содержат только код и не имеют интерфейса пользователя.
Стандартный модуль
Чтобы создать новый стандартный модуль в программе, щелкните на кнопке Add New Item (Добавить компонент) на стандартной панели инструментов или на команде Add New Item (Добавить компонент) в меню Project (Проект). Откроется диалоговое окно, которое позволит выбрать шаблон Module и запросит у вас имя этого модуля. После этого в Редакторе кода появится новый пустой модуль. Первый стандартный модуль программы имеет имя по умолчанию Module1.vb, но вы можете изменить это имя, щелкнув правой кнопкой мыши на модуле в Обозревателе решений или с помощью команды Save Module1.vb As (Сохранить Module1.vb как) из меню File (Файл). Попробуйте создать в проекте пустой стандартный модуль.
После завершения установки создадим первую программу. Она будет простенькой. Вначале откроем Visual Studio. На стартовом экране выберем Create a new project (Создать новый проект)
Далее на следующем этапе нам будет предложено указать имя проекта и каталог, где будет располагаться проект.
В поле Project Name дадим проекту какое-либо название. В моем случае это HelloApp .
После этого Visual Studio создаст и откроет нам проект:
Справа находится окно Solution Explorer , в котором можно увидеть структуру нашего проекта. В данном случае у нас сгенерированная по умолчанию структура.
Далее идет непосредственно сам файл кода программы - Program.vb . Как раз этот файл и открыт в текстовом редакторе кода.
Рассмотрим код файла Program.vb :
p>В начале файла идет директива Imports , после которой идет название подключаемого пространства имен. Пространства имен представляют собой организацию функциональности в общие блоки. Например, на первой строке
Команда Imports позволяет импортировать функциональность из других, подключенных библиотек. В частности, здесь подключается функциональность из пространства имен System.
Объявление модуля начинается со слова Module , после которого идет название модуля - в данном случае модуль называется Program:
Завершаться объявление модуля должно выражением End Module . А весь непосредственный код программы должен располагаться между началом объявления модуля и его завершением.
В модуле по умолчанию определен метод Main - это главный метод:
Программа может содержать множество методов, но среди них будет один главный - это метод Main, через который будут вызываться все остальные методы. И метод с данным названием обязательно должен быть в программе.
Метод Main начинается выражением Sub Main , где Sub указывается, что дальше у нас идет метод, который не возвращает никакого значения. Позже мы подробнее разберем, что все это значит. И затем идет название - то есть Main.
Далее в скобках у нас идут параметры метода - args As String() - это массив args, который хранит значения типа String , то есть строки. В данном случае они нам пока не нужны, но в реальной программе это те параметры, которые передаются при запуске программы из консоли.
Метод заканчивается выражением End Sub .
Внутри метода располагаются действия, которые этот метод выполняет:
По умолчанию здесь выполняется одно действие - вызов встроенного метода Console.WriteLine() , который выводит строку на консоль. То есть при выполнении данной программы на консоль будет выводиться "Hello World!"
Теперь мы можем запустить на выполнение с помощью клавиши F5 или с панели инструментов, нажав на зеленую стрелку. И если вы все сделали правильно, то при запуске приложения на консоль будет выведена строка "Hello World!".
Теперь изменим весь этот код на следующий:
Здесь в методе Main вначале идет вызов метода Console.Write("Введите имя:") , он, как и метод Console.WriteLine() выводит на консоль некоторую строку.
Затем с помощью оператора Dim определяется переменная name
Этой переменной присваивается результат другог встроенного метода - Console.ReadLine , который позволяет считать с консоли введенную строку. То есть мы введем в консоли строку (точнее имя), и эта строка окажется в переменой name .
Затем введенное имя выводится на консоль:
Чтобы ввести значение переменной name внутрь выводимой на консоль строки, применяются фигурные скобки <>. То есть при выводе строки на консоль выражение будет заменяться на значение переменной name - введенное имя.
Однако чтобы можно было вводить таким образом значения переменных внутрь строки, перед строкой указывается знак доллара $.
Запустим проект на выполнение с помощью клавиши F5 и после приглашения к вводу введем какое-нибудь имя:
В данном случае наша программа представляет модуль с именем Module1 . Концепция модулей представляет парадигму модульного программирования, согласно которому вся программа делится на ряд модулей, которые отвечают за разные функции программы. Пока мы использовали только один модуль в программе. Теперь создадим программу из двух модулей - первый модуль будет считывать из файла некоторое значение, а другой модуль будет получать это значение и проводить с ним некоторые операции. Чтобы добавить в программу второй модуль, нажмите справа в окне Solution Explorer (Обозреватель решений) на название проекта правой кнопкой мыши, затем в появившемся списке выберите пункт Add (Добавить) -> Module. (Модуль) .
В открывшемся диалоговом окне выберите пункт Module (Модуль) , оставьте в качестве его имени Module2 и нажмите кнопку Add (Добавить)
Таким образом, мы добавили в программу новый модуль Module2 . В его коде ничего не определено, кроме объявления самого модуля:
Этот модуль будет отвечать у нас за считывание значения из файла. Чтобы считать файл, воспользуемся классом StreamReader , определенным в пространстве имен System.IO. Поэтому нам нужно импортировать данное пространство имен с помощью оператора Imports . Импортирование пространства имен производится в самом начале программы перед определением модуля или класса:
Теперь перейдем к самой реализации нашей программы - определим функцию, которая будет в качестве параметра принимать путь к файлу и будет возвращать считанное значение:
Обратите внимание на конструкцию Try . Catch . End Try - она нужна нам для обработки ошибок. Мы могли бы ее не использовать, но при выполнении программы может возникнуть ошибка. Например, мы введем неверный путь к файлу, и чтобы программа не зависла, а продолжала работать, мы используем данную конструкцию. После выражения Catch определен код для вывода ошибки на экран: Console.WriteLine(ex.Message).
Весь код нашей программы сосредоточен в трех строках между Try и Catch:
В первой строке мы создаем поток для считывания файла, который мы получаем из параметра path. Чтобы создать новый объект используется ключевое слово New . Во второй строке мы считываем первый символ из файла. Метод ReadLine класса StreamReader считывает одну строку из файла, поэтому нам надо будет потом ее привести к типу Integer и полученное значение присвоить переменной number. В третьей строке мы закрываем поток методом Close .
Теперь перейдем к главному модулю. Он будет получать результат из модуля Module2 и вычислять факториал числа:
Итак, этот код должен быть вам в целом знаком: сначала мы вводим путь к файлу, передаем его в функцию Read , которая определена в модуле Module2 . Так как мы для модуля Module2 определили пространство имен, то надо указать и его, поэтому вызов метода имеет следующий вид:
Хотя, если бы оба модуля находились в одном пространстве имен, то мы бы могли не указывать пространство имен. Итак, допустим, у нас на диске E находится файл Module.txt, в которое записано число 5. Тогда запустим программу, нажав F5, введем полный путь к файлу и получим факториал числа 5:
Объявляет имя модуля и вводит определение переменных, свойств, событий и процедур, которые входят в модуль.
Работа со стандартными модулями
Когда вы будете писать длинную программу, у вас, скорее всего, будет несколько форм и процедур событий, которые используют одни и те же переменные и процедуры. По умолчанию переменные локальны для процедуры события, что означает, что они могут быть прочитаны и изменены только в той процедуре события, в которой они созданы. Вы также можете объявить переменные в верхней части программного кода формы и присвоить переменным более широкую область видимости , распространяющуюся на всю форму. Однако если вы создаете в проекте несколько форм, переменные, объявленные в верхней части формы, будут доступны только в той форме, в которой они объявлены. Точно также, процедуры событий по умолчанию объявляются как частные ( private ) и являются локальными для той формы, в которой они созданы. Например, нельзя вызвать процедуру события Button1_Click из второй формы с именем Form2 , если процедура события объявлена в Form1 как частная.
Примечание. О том, как добавлять в проект дополнительные формы, речь пойдет в "Управление формами Windows" .
Чтобы сделать переменные и процедуры доступными для всех форм и процедур событий проекта, их можно объявить в одном или нескольких стандартных модулях проекта. Стандартный модуль, или модуль кода, - это специальный файл с расширением .vb. Он содержит переменные и процедуры, которые могут быть использованы в любом месте программы. (В предыдущей версии Visual Basic модули имели расширение . bas .) Точно так же, как и в случае с формами, стандартные модули показаны в Solution Explorer (Обозреватель решений) отдельно, и стандартный модуль может быть сохранен на диск с помощью команды Save Module1 As (Сохранить Module1 как) из меню File ( Файл ) . Однако, в отличие от форм, стандартные модули содержат только код и не имеют интерфейса пользователя.
Стандартный модуль
Чтобы создать новый стандартный модуль в программе, щелкните на кнопке Add New Item (Добавить компонент) на стандартной панели инструментов или на команде Add New Item (Добавить компонент) в меню Project (Проект). Откроется диалоговое окно, которое позволит выбрать шаблон Module и запросит у вас имя этого модуля. После этого в Редакторе кода появится новый пустой модуль. Первый стандартный модуль программы имеет имя по умолчанию Module1.vb, но вы можете изменить это имя, щелкнув правой кнопкой мыши на модуле в Обозревателе решений или с помощью команды Save Module1.vb As (Сохранить Module1.vb как) из меню File (Файл). Попробуйте создать в проекте пустой стандартный модуль.
После завершения установки создадим первую программу. Она будет простенькой. Вначале откроем Visual Studio. На стартовом экране выберем Create a new project (Создать новый проект)
Далее на следующем этапе нам будет предложено указать имя проекта и каталог, где будет располагаться проект.
В поле Project Name дадим проекту какое-либо название. В моем случае это HelloApp .
После этого Visual Studio создаст и откроет нам проект:
Справа находится окно Solution Explorer , в котором можно увидеть структуру нашего проекта. В данном случае у нас сгенерированная по умолчанию структура.
Далее идет непосредственно сам файл кода программы - Program.vb . Как раз этот файл и открыт в текстовом редакторе кода.
Рассмотрим код файла Program.vb :
p>В начале файла идет директива Imports , после которой идет название подключаемого пространства имен. Пространства имен представляют собой организацию функциональности в общие блоки. Например, на первой строке
Команда Imports позволяет импортировать функциональность из других, подключенных библиотек. В частности, здесь подключается функциональность из пространства имен System.
Объявление модуля начинается со слова Module , после которого идет название модуля - в данном случае модуль называется Program:
Завершаться объявление модуля должно выражением End Module . А весь непосредственный код программы должен располагаться между началом объявления модуля и его завершением.
В модуле по умолчанию определен метод Main - это главный метод:
Программа может содержать множество методов, но среди них будет один главный - это метод Main, через который будут вызываться все остальные методы. И метод с данным названием обязательно должен быть в программе.
Метод Main начинается выражением Sub Main , где Sub указывается, что дальше у нас идет метод, который не возвращает никакого значения. Позже мы подробнее разберем, что все это значит. И затем идет название - то есть Main.
Далее в скобках у нас идут параметры метода - args As String() - это массив args, который хранит значения типа String , то есть строки. В данном случае они нам пока не нужны, но в реальной программе это те параметры, которые передаются при запуске программы из консоли.
Метод заканчивается выражением End Sub .
Внутри метода располагаются действия, которые этот метод выполняет:
По умолчанию здесь выполняется одно действие - вызов встроенного метода Console.WriteLine() , который выводит строку на консоль. То есть при выполнении данной программы на консоль будет выводиться "Hello World!"
Теперь мы можем запустить на выполнение с помощью клавиши F5 или с панели инструментов, нажав на зеленую стрелку. И если вы все сделали правильно, то при запуске приложения на консоль будет выведена строка "Hello World!".
Теперь изменим весь этот код на следующий:
Здесь в методе Main вначале идет вызов метода Console.Write("Введите имя:") , он, как и метод Console.WriteLine() выводит на консоль некоторую строку.
Затем с помощью оператора Dim определяется переменная name
Этой переменной присваивается результат другог встроенного метода - Console.ReadLine , который позволяет считать с консоли введенную строку. То есть мы введем в консоли строку (точнее имя), и эта строка окажется в переменой name .
Затем введенное имя выводится на консоль:
Чтобы ввести значение переменной name внутрь выводимой на консоль строки, применяются фигурные скобки <>. То есть при выводе строки на консоль выражение будет заменяться на значение переменной name - введенное имя.
Однако чтобы можно было вводить таким образом значения переменных внутрь строки, перед строкой указывается знак доллара $.
Запустим проект на выполнение с помощью клавиши F5 и после приглашения к вводу введем какое-нибудь имя:
В данном случае наша программа представляет модуль с именем Module1 . Концепция модулей представляет парадигму модульного программирования, согласно которому вся программа делится на ряд модулей, которые отвечают за разные функции программы. Пока мы использовали только один модуль в программе. Теперь создадим программу из двух модулей - первый модуль будет считывать из файла некоторое значение, а другой модуль будет получать это значение и проводить с ним некоторые операции. Чтобы добавить в программу второй модуль, нажмите справа в окне Solution Explorer (Обозреватель решений) на название проекта правой кнопкой мыши, затем в появившемся списке выберите пункт Add (Добавить) -> Module. (Модуль) .
В открывшемся диалоговом окне выберите пункт Module (Модуль) , оставьте в качестве его имени Module2 и нажмите кнопку Add (Добавить)
Таким образом, мы добавили в программу новый модуль Module2 . В его коде ничего не определено, кроме объявления самого модуля:
Этот модуль будет отвечать у нас за считывание значения из файла. Чтобы считать файл, воспользуемся классом StreamReader , определенным в пространстве имен System.IO. Поэтому нам нужно импортировать данное пространство имен с помощью оператора Imports . Импортирование пространства имен производится в самом начале программы перед определением модуля или класса:
Теперь перейдем к самой реализации нашей программы - определим функцию, которая будет в качестве параметра принимать путь к файлу и будет возвращать считанное значение:
Обратите внимание на конструкцию Try . Catch . End Try - она нужна нам для обработки ошибок. Мы могли бы ее не использовать, но при выполнении программы может возникнуть ошибка. Например, мы введем неверный путь к файлу, и чтобы программа не зависла, а продолжала работать, мы используем данную конструкцию. После выражения Catch определен код для вывода ошибки на экран: Console.WriteLine(ex.Message).
Весь код нашей программы сосредоточен в трех строках между Try и Catch:
В первой строке мы создаем поток для считывания файла, который мы получаем из параметра path. Чтобы создать новый объект используется ключевое слово New . Во второй строке мы считываем первый символ из файла. Метод ReadLine класса StreamReader считывает одну строку из файла, поэтому нам надо будет потом ее привести к типу Integer и полученное значение присвоить переменной number. В третьей строке мы закрываем поток методом Close .
Теперь перейдем к главному модулю. Он будет получать результат из модуля Module2 и вычислять факториал числа:
Итак, этот код должен быть вам в целом знаком: сначала мы вводим путь к файлу, передаем его в функцию Read , которая определена в модуле Module2 . Так как мы для модуля Module2 определили пространство имен, то надо указать и его, поэтому вызов метода имеет следующий вид:
Хотя, если бы оба модуля находились в одном пространстве имен, то мы бы могли не указывать пространство имен. Итак, допустим, у нас на диске E находится файл Module.txt, в которое записано число 5. Тогда запустим программу, нажав F5, введем полный путь к файлу и получим факториал числа 5:
Объявляет имя модуля и вводит определение переменных, свойств, событий и процедур, которые входят в модуль.
Syntax
Синтаксис
Компоненты
attributelist
Необязательный элемент. См. список атрибутов.
accessmodifier
Необязательный элемент. Может применяться один из перечисленных ниже типов.
name
Обязательный. Имя этого модуля. См. раздел Declared Element Names.
statements
Необязательный элемент. Инструкции, которые определяют переменные, свойства, события, процедуры и вложенные типы этого модуля.
End Module
Module Завершает определение.
Читайте также: