Знакомство со средой Microsoft Visual Studio 2010 на примере простого приложения для командной строки

Microsoft Visual Studio как линейка продуктов корпорации Microsoft, включающих интегрированную среду разработки программного обеспечения и ряд других инструментальных средств. Модификация консольного приложения и его основные функциональные особенности.

Рубрика Программирование, компьютеры и кибернетика
Вид лабораторная работа
Язык русский
Дата добавления 23.04.2017
Размер файла 1,9 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

Лабораторная работа

Знакомство со средой Microsoft Visual Studio 2010 на примере простого приложения для командной строки

1. Вводная часть

программный приложение visual studio

Microsoft Visual Studio - линейка продуктов корпорации Microsoft (Майкрософт), включающих интегрированную среду разработки (Integrated Development Environment/Integrated Debugging Environment - IDE) программного обеспечения и ряд других инструментальных средств.

Microsoft Visual Studio позволяет разрабатывать:

· консольные приложения (приложения для командной строки);

· приложения с графическим интерфейсом (англ. Graphical user interface, GUI), в том числе с поддержкой технологии Windows Forms;

· библиотеки компонентов для приложений;

· надстройки над различными программными продуктами от Microsoft, таких как например Microsoft Office Word;

· также веб-сайты, веб-приложения, веб-службы как в родном, так и в управляемом кодах для всех платформ, поддерживаемых Microsoft Windows, Windows Mobile, Windows CE.NET Framework.NET Compact Framework и Microsoft Silverlight;

· некоторые другие виды проектов и решений.

Среда включает в себя такие компоненты как редактор исходного кода с поддержкой технологии IntelliSense (технология автодополнения Microsoft) и возможностью простейшего рефакторинга кода (процесса изменения внутренней структуры программы, не затрагивающий её внешнего поведения и имеющий целью облегчить понимание её работы). Встроенный отладчик может работать как отладчик уровня исходного кода (программа на каком-либо языке), так и как отладчик машинного уровня (команды в машинных кодах). Остальные встраиваемые инструменты включают в себя редактор форм для упрощения создания графического интерфейса приложения, веб-редактор, дизайнер классов и дизайнер схемы базы данных. Visual Studio позволяет создавать и подключать сторонние дополнения (плагины) для расширения функциональности практически на каждом уровне, включая добавление поддержки систем контроля версий исходного кода (как например, Subversion и Visual SourceSafe), добавление новых наборов инструментов (например, для редактирования и визуального проектирования кода на предметно-ориентированных языках программирования или инструментов для прочих аспектов цикла разработки программного обеспечения (например, клиент Team Explorer для работы с Team Foundation Server).

Visual Studio включает один или несколько компонентов из следующих (в зависимости от редакции, например Express или Professional):

· Visual Basic.NET, а до его появления - Visual Basic;

· Visual C++;

· Visual C#;

· Visual F# (включён в Visual Studio 2010);

Многие варианты поставки также включают:

· Microsoft SQL Server либо Microsoft SQL Server Express.

В данном лабораторном практикуме будет использоваться версия Visual Studio 2010 (кодовое имя Hawaii, для Ultimate - Rosario; внутренняя версия 10.0) - выпущена 12 апреля года вместе с.NET Framework 4. Среда разработки Visual Studio включает поддержку языков C# 4.0 и Visual Basic.NET 10.0, а также языка F# (Эф-шарп).

Доступные редакции среды разработки:

· Express - бесплатная среда разработки, включающая только базовый набор возможностей и библиотек.

· Professional - поставка, ориентированная на профессиональное создание программного обеспечения, и командную разработку, при которой созданием программы одновременно занимаются несколько человек (используемая в Практикуме).

· Premium - издание, включающее дополнительные инструменты для работы и исходным кодом программ и создания баз данных.

· Ultimate - наиболее полное издание Visual Studio, включающие все доступные инструменты для написания, тестирования, отладки и анализа программ, а также дополнительные инструменты для работы с базами данных и проектирования архитектуры ПО.

Используемую в данном лабораторном практикуме версию Visual Studio 2010 Professional Edition можно получить бесплатно, приняв участие в программе Microsoft DreamSpark.

Microsoft DreamSpark - программа корпорации Microsoft, предоставляющая школьникам, студентам и аспирантам бесплатный доступ к инструментам Microsoft для разработки и дизайна. Изначально программа распространялась на учащихся вузов, в настоящее время она расширена также на учащихся старших классов. Программа была анонсирована Биллом Гейтсом 18 февраля 2008 года в Пало-Альто, США.

Рис. 1.1. Получение среды разработки на сайте DreamSpark.com (http://www.dreamspark.com)

2. Знакомство со средой разработки на примере создания простого консольного приложения

После первого запуска Visual Studio 2010, откроется Начальная страница:

Рис. 2.1. Начальная страница Visual Studio 2010 Professional (русская версия)

Для начала, надо создать пустой проект, для этого выполним последовательно: Файл -> Создать -> Проект… (также можно просто нажать сочетание клавиш Ctrl+Shift+N или пункт «Создать проект…» на Начальной странице):

Рис. 2.2. Создание нового проекта

Откроется окно создания проекта и выбора необходимых нам параметров. Что же такое Проект?

Проект (Project) используется в Visual Studio для логической группировки нескольких файлов, содержащих исходный код, на одном из поддерживаемых языков программирования, а также любых вспомогательных файлов (ресурсы для проекта: это могут быть и дополнительные библиотеки, файлы изображений, иконок и прочее). Обычно после сборки проекта (которая включает компиляцию всех входящих в проект файлов исходного кода) создается один исполняемый модуль (исполняемый файл), либо несколько, если это веб-приложение.

Фактически, Проект это структурированная директория под конкретную программу написанную программистом и содержащая версии сборки скомпилированной программы (по конфигурациям по умолчанию: Release или Debug).

Решение же это просто объединение нескольких проектов под одним «именем» и параметрами.

Выберем слева в пункте Установленные шаблоны язык Visual C#, далее найдём в списке Консольное приложение. Также здесь можно выбрать какой использовать «фреймворк» (набора компонентов для написания программ). В нашем случае выберем.NET Framework 4.

Рис. 2.3. Окно создания нового проекта

В поле Имя вводим LWP01Console - это название программы (выбрано по названию лабораторного практикума, номеру и названию работы). В поле Расположение указана конечная директория, где будет находиться весь проект (значение «по умолчанию» можно поменять, выполнив действия: Сервис -> Параметры… -> Проекты и решения -> меняем путь в поле Размещение проектов). Выберем расположение удобное для быстрого поиска. В поле Имя решения вводится либо название программы «по умолчанию» из поля Имя автоматически, либо можно ввести своё собственное. Под этим именем будет создана конечная папка проекта (если Имя и Имя решения разные).

Рис. 2.4. Вводим данные нового проекта консольного приложения

После нажатия клавиши ОК, мы увидим сформированный проект и исходный код консольного приложения (не пустого изначально).

Рис. 2.5. Исходный код консольного приложения сформированного средой разработки

Как видим, среда разработки сформировала один файл Program.cs с исходным кодом следующего содержания:

using System;

using System. Collections. Generic;

using System. Linq;

using System. Text;

namespace LWP01Console

{

class Program

{

static void Main (string[] args)

{

}

}

}

Теперь, можно откомпилировать созданную программу, нажав клавишу F5 или Отладка -> Начать отладку. Если программист хочет запустить программу без отладки и уверен что программа не нуждается в поиске ошибок и оптимизации кода, то можно нажать Отладка -> Запуск без отладки.

По умолчанию клавиша отладки вынесена на панель инструментов вверху. Запускаем приложение в режиме отладки (и компиляции debug-версии программы) нажав на иконку (Debug выбрано изначально).

Рис. 2.5. Запуск консольного приложения по конфигурации Debug

Рассмотрим подробнее наше приложение. Для начала обратим внимание на Обозреватель решений (справа вверху). Здесь отображается текущая структура нашего проекта (решения) и показаны все файлы проекта и все ссылки на библиотеки, которые использованы (подключены) к проекту.

Рис. 2.6. Обозреватель решений: состав проекта консольного приложения

В поле Ссылки можно увидеть все текущие библиотеки изначально подключённые к проекту. Здесь можно добавлять ссылки, для этого правой кнопкой мыши кликнем на пункт Ссылки -> Добавить ссылку…:

Рис. 2.7. Окно Добавить ссылку

В Properties окна обозревателя решений находится файл свойств (или файл сборки) нашего консольного приложения (AssemblyInfo.cs), которые будут ассоциированы с ним после компиляции. Содержание следующее:

using System. Reflection;

using System. Runtime. CompilerServices;

using System. Runtime. InteropServices;

 // Управление общими сведениями о сборке осуществляется с помощью

 // набора атрибутов. Измените значения этих атрибутов, чтобы изменить сведения,

 // связанные со сборкой.

[assembly: AssemblyTitle («LWP01Console»)]

[assembly: AssemblyDescription(«»)]

[assembly: AssemblyConfiguration(«»)]

[assembly: AssemblyCompany(«»)]

[assembly: AssemblyProduct («LWP01Console»)]

[assembly: AssemblyCopyright («Copyright © 2011»)]

[assembly: AssemblyTrademark(«»)]

[assembly: AssemblyCulture(«»)]

 // Параметр ComVisible со значением FALSE делает типы в сборке невидимыми

 // для COM-компонентов. Если требуется обратиться к типу в этой сборке через

 // COM, задайте атрибуту ComVisible значение TRUE для этого типа.

[assembly: ComVisible(false)]

 // Следующий GUID служит для идентификации библиотеки типов, если этот проект будет видимым для COM

[assembly: Guid («eb30278d-af90-4a61-a3e4-d64ba45f6b7c»)]

 // Сведения о версии сборки состоят из следующих четырех значений:

 //

 // Основной номер версии

 // Дополнительный номер версии

 // Номер построения

 // Редакция

 //

 // Можно задать все значения или принять номер построения и номер редакции по умолчанию,

 // используя «*», как показано ниже:

 // [assembly: AssemblyVersion («1.0.*»)]

[assembly: AssemblyVersion («1.0.0.0»)]

[assembly: AssemblyFileVersion («1.0.0.0»)]

Содержание пунктов говорит само за себя, здесь можно менять все атрибуты нашего приложения, включая версию приложения и описание.

Управлять напрямую (то есть менять значения в самом файле) не обязательно. Для этого есть инструмент, который можно активировать так: правой кнопкой мыши жмём на название проекта LWP01Console, далее выбираем Свойства (Alt+Enter). Откроется окно свойств текущего проекта (в решении):

Рис. 2.8. Свойства: LWP01Console

Жмём на Сведения о сборке…:

Рис. 2.9. Окно Сведения о сборке консольного приложения

Некоторые из свойств сборки можно посмотреть сразу после компиляции в окне свойств приложения:

Рис. 2.10. Свойства консольного приложения (скомпилированного)

Вернёмся в среду разработки:

При выделении какого либо объекта в обозревателе решений можно увидеть его текущие свойства и установки для данного проекта. Для пространство имён Microsoft. Csharp это выглядит так:

Рис. 2.11. Свойства объекта

3. Модификация консольного приложения

Для начала произведём небольшую настройку среды разработки для большего удобства прочтения исходного кода. Для этого выполним Сервис -> Параметры… -> Текстовый редактор -> C# -> Показывать: Номера строк.

Теперь слева в окне исходного кода отображаются номера строк для кода C#:

Рис. 3.1. Отображение номера строки

Теперь модифицируем исходный код. Наиболее простая модификация, это вывод какой-либо фразы в консольном приложении. Сделаем это:

using System;

using System. Collections. Generic;

using System. Linq;

using System. Text;

namespace LWP01Console

{

class Program

{

static void Main (string[] args)

{

Console. WriteLine («Hello World!\nИ по-русски можно? Конечно, привет мир!\nThis is my first application using C#!»);

Console. ReadKey();

}

}

}

Мы добавили всего три строчки:

Console. WriteLine («Hello World!\nИ по-русски можно? Конечно, привет мир!\nThis is my first application using C#!»);

Console. ReadKey();

Console. Clear();

Скомпилируем это приложение, в результате увидим следующее (Рис. 3. 2.):

Рис. 3.2. Модифицированное консольное приложение

Теперь усложним приложение, добавив следующий исходный код:

using System;

using System. Collections. Generic;

using System. Linq;

using System. Text;

namespace LWP01Console

{

class Program

{

static void Main (string[] args)

{

Console. WriteLine («Hello World!\nИ по-русски можно? Конечно, привет мир!\nThis is my first application using C#!»);

Console. ReadKey();

Console. Clear();

 //

Console. WriteLine («Пожалуйста, введите символы:\n»);

String a;

a = Console. ReadLine();

Console. WriteLine («\n\tВы ввели символ:» + a +».»);

Console. ReadKey();

Console. Clear();

 //

Console. WriteLine («Пожалуйста, введите число элементов массива:\n»);

int x = Convert. ToInt32 (Console. ReadLine());

Console. WriteLine («\nПожалуйста, введите элемент массива:\n»);

string[] m1 = new string[x];

int i;

for (i = 0; i < m1. GetLength(0); i++)

{

Console. Write («Элемент {» + i +»}:»);

m1 [i] = Console. ReadLine();

}

Console. WriteLine («\n\tВаш массив:»);

for (i = 0; i < m1. GetLength(0); i++)

{

Console. Write («\t» + m1 [i]);

Console. WriteLine();

}

Console. ReadKey();

}

}

}

Скомпилируем его и проверим работоспособность. Теперь поясним исходный код. Для удобства, исходный код поделим на части символом комментариев ( // ).

Теперь программа выполняет три итерации. Первая итерация сначала выводит строку (Рис. 3. 2.). Вторая итерация предлагает нам ввести эту строку самим, затем выводит её на экран. И третья итерация позволяет нам ввести число элементов одномерного массива, заполнить его и тоже вывести на экран. После каждой итерации экран очищается.

Рис. 3.3. Результат работы третьей итерации работы консольного приложения

Поясним исходный код к каждой итерации. Ключевые слова подсвечены синим. В самом начале кода мы видим следующую строку:

using System;

Библиотеки классов.NET Framework образуют иерархическую структуру пространств имён (namespaces). Это может привести к довольно длинным именам, если требуемый класс или тип имеет очень большую глубину вложения. Чтобы сократить ввод длинных имён, в C# введена директива using. Посмотрим работу этой директивы на примере. В нашем приложении есть такая строка:

Console. WriteLine («Hello World!\nИ по-русски можно? Конечно, привет мир!\nThis is my first application using C#!»);

Если бы изначально мы не подключали ссылки, эта строка выглядела бы так:

System. Console. WriteLine («Hello World!\nИ по-русски можно? Конечно, привет мир!\nThis is my first application using C#!»);

Ввод такого текста несложен, а представим, что у нас большое приложение с обширным набором типов и классов. Директива using позволяет компилятору найти непонятный ему элемент, просматривая указанное пространство имен. В данной работе директива using используется так:

using System;

namespace LWP01Console

{

class Program

{

static void Main (string[] args)

{

Console. WriteLine («Hello World!\nИ по-русски можно? Конечно, привет мир!\nThis is my first application using C#!»);

В ходе синтаксического анализа метода Console. WriteLine компилятор установит, что этот метод не описан. Поэтому он примется просматривать пространства имён, заданные директивой using, и, найдя описание метода в пространстве имён System, завершит компиляцию кода без ошибок.

И так, директива using это зарезервированное слово в языке Си-шарп. Она используется в двух случаях:

· разрешает использование типов в пространстве имён, поэтому уточнение использования типа в этом пространстве имён не требуется: using System. Text;

· позволяет создавать псевдонимы пространства имен или типа. Это называется директива using alias и выглядит примерно так: using Project = PC. MyCompany. Project;

Ключевое слово using также используется для создания операторов using, которые обеспечивают правильную обработку объектов IDisposable, например файлов и шрифтов.

Как видим, также как и в C и C++ язык унаследовал символ «;» (точка с запятой) как символ разделения операторов, однако можно писать код и без этого разделителя (частично).

Директива using применима к пространствам имён, но не к классам. В нашем примере System является пространством имён, Console - классом, a WriteLine - статическим методом класса Console. Поэтому такой код неверен:

using System. Console; // Нельзя использовать директиву using по отношению к классу

 // …

namespace LWP01Console

{

class Program

{

static void Main (string[] args)

{

WriteLine («Hello World!\nИ по-русски можно? Конечно, привет мир!\nThis is my first application using C#!»);

Указывать класс в директиве using нельзя, но существует вариант директивы using, позволяющий создать псевдоним для класса:

using <псевдоним> = <класс>;

Благодаря этой форме директивы using можно написать подобный код:

using Console2011 = System. Console;

 // …

class Program

{

static void Main (string[] args)

{

Console2011. WriteLine («Hello World!\nИ по-русски можно? Конечно, привет мир!\nThis is my first application using C#!»);

Немного об универсальном программировании:

Описание класса в С# должно содержать встроенное (inline) описание всех методов - в этом языке заголовочных файлов не бывает (в отличие например от C и C++). Благодаря этому правилу разработчики классов могут создавать высоко мобильный код, что является одной из ключевых концепций среды.NET. Создавая Си-шарп-класс, в конце концов, разработчик имеет полностью инкапсулированную связку функциональных возможностей, которую можно легко перенести в любую среду разработки, и ему не нужно беспокоиться, как в другом языке обрабатываются включаемые файлы, и существует ли в нём вообще механизм включения файлов. Такой подход - универсальное программирование («one-stop programming») - позволяет, например, перебросить весь класс на страницу ASP (Active Server Pages), и он будет функционировать так, будто был скомпилирован для обычного приложения.

namespace LWP01Console

{

class Program

Здесь мы видим имя класса и пространства имён. Автоматически (при создании консольного приложения средой разработки) было выбрано пространство имён LWP01Console, и имя класса, который описывает проблемную область. В нашем случае это Program. Начало и окончание описания класса отмечается фигурными скобками - открывающей «{» и закрывающей «}» соответственно. Всё, что внутри них, считается частью класса. Заметим: в нашем случае класс называется Program, а всё, что есть в приложении, описано в контексте этого класса.

Все члены класса описываются внутри фигурных скобок: методы, поля, свойства, индексаторы (indexers), атрибуты и интерфейсы.

Создание пространства имён указывается ключевым словом namespace. Объявляемые пространства имён могут использоваться для структурирования программы. Например:

namespace Name01. Name02

{

class A {}

}

namespace Name03

{

using Name01. Name02;

class B: A {}

}

Идём дальше по коду:

static void Main (string[] args)

Каждое приложение на C# должно иметь метод с именем Main(), описанный в одном из его классов. Не имеет значения, в каком классе находится этот метод: классов, может быть столько, сколько нужно для вашего приложения. Главное, чтобы в каком-нибудь классе был метод с именем Main. Кроме того, этот метод должен быть описан как открытый (public) и статический (static). Ключевое слово public является модификатором доступа, который сообщает компилятору Си-шарп, что этот метод может вызвать кто угодно. Ключевое слово static означает, что метод является глобальным и что для его вызова не требуется создавать экземпляр этого класса. Это очень важно, так как иначе компилятор не знал бы, как или когда создавать экземпляр вашего класса. Раз метод статический, компилятор сохранит адрес метода как точку входа, и среда.NET начнёт с него выполнение приложения.

Следующие строчки кода таковы:

Console. WriteLine («Hello World!\nИ по-русски можно? Конечно, привет мир!\nThis is my first application using C#!»);

Console. ReadKey();

Console. Clear();

Если System - это пространство имён, Console - класс, определённый в этом пространстве, то метод, WriteLine1 - метод определённый в этом классе.

Класс Console содержит следующие методы, позволяющие осуществлять чтение и запись символов из потоков ввода / вывода:

· Read - чтение символов из потока ввода.

· ReadLine - чтение строки символов из потока ввода.

· Write - запись строки символов в поток вывода.

· WriteLine - запись в поток вывода строки символа, ограниченной символами конца строки.

ReadKey - получает следующий нажаты пользователем символ или функциональную клавишу. Нажатая клавиша отображается в окне консоли. Используем этот метод для остановки выполнения консольного приложения (для отображения выполненных действий приложений).

Clear - удаляет из буфера консоли и её окна отображаемую информацию.

ПРИМЕЧАНИЕ 1: Описания применяемых в данной работе методов также можно посмотреть, наведя курсор на нужное слово методе.

 //

Console. WriteLine («Пожалуйста, введите символы:\n»);

String a;

a = Console. ReadLine();

Console. WriteLine («\n\tВы ввели символ:» + a +».»);

Console. ReadKey();

Console. Clear();

Двойной правый слеш - комментарии (зелёные). Также комментарии можно задавать так:

/* Текст комментария */

В остальном, здесь всё просто. Объявляем переменную «a» (строковая - String или string), выполняем считывание символов с клавиатуры (ReadLine) и выводим введённый символ в потоке с переводом строки. Конструкция «+ a +» служит для подстановки переменной «a» в поток символов для вывода в окне консольного приложения.

\n определяется как перевод курсора на следующую строку.

\t определяется как символ табуляции в окне консоли.

Последний участок кода (третья итерация):

 //

Console. WriteLine («Пожалуйста, введите число элементов массива:\n»);

int x = Convert. ToInt32 (Console. ReadLine());

Console. WriteLine («\nПожалуйста, введите элемент массива:\n»);

string[] m1 = new string[x];

int i;

for (i = 0; i < m1. GetLength(0); i++)

{

Console. Write («Элемент {» + i +»}:»);

m1 [i] = Console. ReadLine();

}

Console. WriteLine («\n\tВаш массив:»);

for (i = 0; i < m1. GetLength(0); i++)

{

Console. Write («\t» + m1 [i]);

Console. WriteLine();

}

Console. ReadKey();

Console. Clear();

Здесь идёт объявление переменной «x» и присваивание отконвертированного числа введённого с клавиатуры в int (32-битное число со знаком). Конвертирование производится методом Convert (преобразует значение одного базового типа данных к другому базовому типу данных), который использует ToInt32 (преобразует заданное строковое представление числа в эквивалентное 32-разрядное знаковое целое число). Далее мы объявляем строковый одномерный массив (string[]) где число элементов задаётся по числу в переменной «x» (индекс начинается с нуля) и в цикле (ключевая последовательность i < m1. GetLength(0), где метод получает 32-разрядное целое число, представляющее количество элементов в заданном измерении массива - в нашем массиве одно измерение, которое мы пдоставляем в метод под цифрой «0»). В теле цикла мы последовательно вводим символы элемента массива (m1 [i]). Второй цикл делает обратную операцию выводит на массив.

Немного поясним несколько простых правил при написании кода, так как зачастую подобные ошибки наиболее часто встречаемы и как следствие наиболее неприятны.

Во-первых, C# позволяет писать код свободно, но каждый оператор должен заканчивать точкой с запятой2. Также можно написать код приложения даже в одну строчку2.

Во-вторых, C# чувствителен к регистру. А это значит что «ConsolE», «Static» и «Public» могут вызвать ошибки. Также важно понимать, что это касается и переменных и операторов.

ПРИМЕЧАНИЕ 2: Однако, не всегда точка с запятой обязана быть. Например, конструкция без точек с запятой ниже, выдаст сообщение с тремя кнопками. Вставим этот код, в наше консольное приложение предварительно добавив ссылку System. Windows. Forms (Рис. 3. 4.):

Рис. 3.4. Добавление новой ссылки System. Windows. Forms

while (System. Windows. Forms. MessageBox. Show («Hello World without ';'! Привет мир без точек с запятой!», «This is My First Message Box!», System. Windows. Forms. MessageBoxButtons. YesNoCancel)!= System. Windows. Forms. DialogResult. Yes){}

Рис. 3.5. Результат работы кода без точек с запятой (нужно нажать «Да»)

Размещено на Allbest.ru

...

Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.