Консольные приложения
В этой главе представлен базовый "арсенал" VB.NET. Большая часть материала сводится к краткому обзору концепций, присущих всем языкам программирования (например, переменных и команд цикла), и описанию базовых типов данных, в основном различных чисел и строк. Читатели, хорошо знакомые с VB6, могут бегло пролистать эту главу.
Лишь в нескольких примерах этой главы встречается реальный код, который может использоваться в серьезных программах VB.NET. Дело в том, что ни одна серьезная программа VB.NET не обходится без объектов, построенных по шаблонам, называемых классами, а эта тема будет рассматриваться в главе 4. Мы начнем с базовых конструкций языка, потому что в противном случае нам пришлось бы ограничиться примитивными классами, не обладающими никакой практической ценностью. В этой главе не рассматриваются классы, определяемые пользователем, и продемонстрированы лишь простейшие примеры использования встроенных классов .NET Framework, обладающих исключительно широкими возможностями.
Что же из этого следует? Как ни странно – то, что написанные в этой главе программы весьма близки по стилю к традиционному программированию ранней эпохи BASIC и даже предшествовавшей ей эпохи Fortran и COBOL (если не считать некоторых странных, но необходимых синтаксических конструкций). В частности, в отличие от программ из дальнейших глав, у них всегда есть четко определенные начало и конец, и управление передается от начала к концу (хотя управление может передаваться специальными командами).
Как говорилось во введении, мы постараемся приводить программы, написанные в нормальном стиле .NET, по возможности избегая искусственной совместимости с VB6.
Каждое приложение VB.NET должно иметь точку входа. В точке входа содержится код, автоматически выполняемый при запуске, после чего управление передается остальному коду программы. В относительно простых графических приложениях точка входа может ассоциироваться с начальной формой, как в VB6. Но как было показано в главе 1, код форм Windows достаточно сложен и поиск точки входа может вызвать определенные затруднения. В этой главе рассматриваются только консольные приложения, работающие в консольном окне (наподобие окна сеанса DOS). Да, VB.NET позволяет легко создавать традиционные консольные приложения, часто применяемые при программировании серверных сценариев.
Точкой входа консольного приложения является процедура Sub Main модуля (аналог процедуры Sub Main в VB6). Если выбрать в диалоговом окне New Project значок консольного приложения (Console Application), VB.NET автоматически генерирует "скелет" приложения с точкой входа – процедурой Sub Main:
Module Module1 Sub Main() End Sub End Module
В отличие от VB6, в первой строке задается имя модуля (команда выделена жирным шрифтом). В данном примере используется имя Modul el, принятое по умолчанию. По правилам имя модуля должно совпадать с именем файла. Допустим, вы изменили имя модуля в первой строке: Module Test1. При попытке запустить консольное приложения выводится сообщение об ошибке:
Startup code 'Sub Main' was specified in 'Test.Modulel'. but 'Test.Modulel' was not found
Переименование модуля после его создания выполняется следующим образом:
- Измените имя модуля в окне программы.
- Измените имя файла модуля в окне решения.
- Щелкните правой кнопкой мыши в строке ConsoleApplication окна решения и выберите в контекстном меню команду Properties.
- Убедитесь в том, что в списке Startup object появившегося диалогового окна (рис. 3.1) выбрано имя модуля.
По аналогии с VB6 программа VB.NET (решение) может состоять из нескольких модулей, но наличие процедуры Sub Main допускается только в одном модуле. Приложение завершается по достижении команды End Sub процедуры Sub Main. Например, легендарная программа "Hello world" выглядит следующим образом:
Module Modul el Sub Main() Console.WriteLine("Hello world") End Sub End Module
Если запустить эту программу в IDE, на экране очень быстро мелькнет (и тут же исчезнет) окно DOS со словами "Hello world". Окно закрывается по завершении обработки команды End Sub.