Лекция 2. Начало работы в Visual Studio

Лекция 1. Язык С# и платформа.NET

На сегодняшний момент язык программирования C# один из самых мощных, быстро развивающихся и востребованных языков в ИТ-отрасли. В настоящий момент на нем пишутся самые различные приложения: от небольших десктопных программок до крупных веб-порталов и веб-сервисов, обслуживающих ежедневно миллионы пользователей.

По сравнению с другими языками C# достаточно молодой, но в то же время он уже прошел большой путь. Первая версия языка вышла вместе с релизом Microsoft Visual Studio.NET в феврале 2002 года. Текущей версией языка является версия C# 7.0, которая вышла в 7 марта 2017 года вместе с Visual Studio 2017.

C# является языком с Си-подобным синтаксисом и близок в этом отношении к C++ и Java. Поэтому, если вы знакомы с одним из этих языков, то овладеть C# будет легче.

C# является объектно-ориентированным и в этом плане много перенял у Java и С++. Например, C# поддерживает полиморфизм, наследование, перегрузку операторов, статическую типизацию. Объектно-ориентированный подход позволяет решить задачи по построению крупных, но в тоже время гибких, масштабируемых и расширяемых приложений. И C# продолжает активно развиваться, и с каждой новой версией появляется все больше интересных функциональностей, как, например, лямбды, динамическое связывание, асинхронные методы и т.д.

Роль платформы.NET

Когда говорят C#, нередко имеют в виду технологии платформы.NET (WPF, ASP.NET). И, наоборот, когда говорят.NET, нередко имеют в виду C#. Однако, хотя эти понятия связаны, отождествлять их неверно. Язык C# был создан специально для работы с фреймворком.NET, однако само понятие.NET несколько шире.

Как-то Билл Гейтс сказал, что платформа.NET - это лучшее, что создала компания Microsoft. Возможно, он был прав. Фреймворк.NET представляет мощную платформу для создания приложений. Можно выделить следующие ее основные черты:

· Поддержка нескольких языков. Основой платформы является общеязыковая среда исполнения Common Language Runtime (CLR), благодаря чему.NET поддерживает несколько языков: наряду с C# это также VB.NET, C++, F#, а также различные диалекты других языков, привязанные к.NET, например, Delphi.NET. При компиляции код на любом из этих языков компилируется в сборку на общем языке CIL (Common Intermediate Language) - своего рода ассемблер платформы.NET. Поэтому мы можем сделать отдельные модули одного приложения на отдельных языках.

· Кроссплатформенность..NET является переносимой платформой (с некоторыми ограничениями). Например, последняя версия платформы на данный момент.NET Framework поддерживается на большинстве современных ОС Windows (Windows 10/8.1/8/7/Vista). А благодаря проекту Mono можно создавать приложения, которые будут работать и на других ОС семейства Linux, в том числе на мобильных платформах Android и iOS.

· Мощная библиотека классов..NET представляет единую для всех поддерживаемых языков библиотеку классов. И какое бы приложение мы не собирались писать на C# - текстовый редактор, чат или сложный веб-сайт - так или иначе мы задействуем библиотеку классов.NET.

· Разнообразие технологий. Общеязыковая среда исполнения CLR и базовая библиотека классов являются основой для целого стека технологий, которые разработчики могут задействовать при построении тех или иных приложений. Например, для работы с базами данных в этом стеке технологий предназначена технология ADO.NET. Для построения графических приложений с богатым насыщенным интерфейсом - технология WPF. Для создания веб-сайтов - ASP.NET и т.д.

Также еще следует отметить такую особенность языка C# и фреймворка.NET, как автоматическая сборка мусора. А это значит, что нам в большинстве случаев не придется, в отличие от С++, заботиться об освобождении памяти. Вышеупомянутая общеязыковая среда CLR сама вызовет сборщик мусора и очистит память.

Управляемый и неуправляемый код

Нередко приложение, созданное на C#, называют управляемым кодом (managed code). Что это значит? А это значит, что данное приложение создано на основе платформы.NET и поэтому управляется общеязыковой средой CLR, которая загружает приложение и при необходимости очищает память. Но есть также приложения, например, созданные на языке С++, которые компилируются не в общий язык CIL, как C# или VB.NET, а в обычный машинный код. В этом случае.NET не управляет приложением.

В то же время платформа.NET предоставляет возможности для взаимодействия с неуправляемым кодом. Мы наряду со стандартными классами библиотеки.NET можем также использовать сборки COM.

JIT-компиляция

Как выше писалось, код на C# компилируется в приложения или сборки с расширениями exe или dll на языке CIL. Далее при запуске на выполнение подобного приложения происходит JIT-компиляция (Just-In-Time) в машинный код, который затем выполняется. При этом, поскольку наше приложение может быть большим и содержать кучу инструкций, в текущий момент времени будет компилироваться лишь та часть приложения, к которой непосредственно идет обращение. Если мы обратимся к другой части кода, то она будет скомпилирована из CIL в машинный код. При том уже скомпилированная часть приложения сохраняется до завершения работы программы. В итоге это повышает производительность.

По сути это все, что вкратце надо знать о платформе.NET. А теперь создадим первое приложение.

Лекция 2. Начало работы в Visual Studio

Итак, создадим первое приложение на языке C#. Что для этого потребуется? Во-первых, нам нужен текстовый редактор, в котором мы могли бы напечатать код программы. Во-вторых, нам нужен компилятор, который бы скомпилировал набранный в текстовом редакторе код в приложение exe. В-третьих, нам нужен фреймворк.NET, который требуется для компиляции и выполнения программы.

Чтобы облегчить написание, а также тестирование и отладку программного кода обычно используют специальные среды разработки, в частности, Visual Studio.

Для создания приложений на C# будем использовать бесплатную и полнофункциональную среду разработки - Visual Studio Community 2017, которую можно загрузить по следующему адресу: Microsoft Visual Studio 2017. Также можно использовать Visual Studio 2015.

При инсталляции Visual Studio на ваш компьютер будут установлены все необходимые инструменты для разработки программ, в том числе фреймворк.NET 4.7.

После завершения установки создадим первую программу. Она будет простенькой. Вначале откроем Visual Studio и вверху в строке меню выберем пункт File (Файл) -> New (Создать) -> Project (Проект). Перед нами откроется диалоговое окно создания нового проекта:

Здесь в центре мы выберем пункт Console Application, так как наше первое приложение будет консольным. Внизу в поле Name дадим проекту какое-либо название. В моем случае это FirstApp. И нажмем ОК.

После этого Visual Studio создаст и откроет нам проект:

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

Справа находится окно Solution Explorer, в котором можно увидеть структуру нашего проекта. В данном случае у нас сгенерированная по умолчанию структура: узел Properties или Свойств (он хранит файлы свойств приложения и пока нам не нужен); узел References - это узел содержит сборки dll, которые добавлены в проект по умолчанию. Эти сборки как раз содержат классы библиотеки.NET, которые будет использовать C#. Однако не всегда все сборки нужны. Ненужные потом можно удалить, в то же время если понадобится добавить какую-нибудь нужную библиотеку, то именно в этот узел она будет добавляться.

Далее идет файл конфигурации App.config (пока он нас не интересует) и непосредственно сам файл кода программы Program.cs. Как раз этот файл и открыт в центральном окне. Вначале разберем, что весь этот код представляет:

/*начало секции подключаемых пространств имен*/using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;/*конец секции подключаемых пространств имен*/ namespace FirstApp /*объявление нового пространства имен*/{ class Program /*объявление нового класса*/ {   static void Main(string[] args) /*объявление нового метода*/   {             }/* конец объявления нового метода*/          } /* конец объявления нового класса*/   } /* конец объявления нового пространства имен*/

 

В начале файла идут директивы using после которых идут названия подключаемых пространств имен. Пространства имен представляют собой организацию классов в общие блоки. Например, на первой строке using System; подключается пространство имен System, которое содержит фундаментальные и базовые классы платформы.NET. Физически пространства имен находятся в подключаемых библиотеках dll, которые можно увидеть в окне Solution Explorer, открыв узел References:

Так, вы можете увидеть там библиотеку System.dll, которая содержит классы из пространства имен System. Однако точного соответствия между пространствами имен и названиями файлов dll нет.

Второй строкой опять же подключается вложенное пространство имен System.Collections.Generic: то есть у нас в пространстве имен System определено пространство имен Collections, а уже в нем пространство имен Generic.

И так как C# имеет Си-подобный синтаксис, каждая строка завершается точкой с запятой, а каждый блок кода помещается в фигурные скобки.

Далее начинается уже собственно наше пространство имен, которое будет создавать отдельную сборку или исполняемую программу: сначала идет ключевое слово namespace, после которого название пространства имен. По умолчанию Visual Studio дает ему название проекта. Далее внутри фигурных скобок идет блок пространства имен.

Пространство имен может включать другие пространства или классы. В данном случае у нас по умолчанию сгенерирован один класс - Program. Классы объявляются похожим способом - сначала идет ключевое слово class, а потом название класса, и далее блок самого класса в фигурных скобках.

Класс может содержать различные переменные, методы, свойства, прочие инструкции. В данном случае у нас объявлен один метод Main. Сейчас он пуст и ничего не делает. В программе на C# метод Main является входной точкой программы, с него начинается все управление. Он обязательно должен присутствовать в программе.

Слово static указывает, что метод Main - статический, а слово void - что он не возвращает никакого значения. Позже мы подробнее разберем, что все это значит.

Далее в скобках у нас идут параметры метода - string[] args - это массив args, который хранит значения типа string, то есть строки. В данном случае ни нам пока не нужны, но в реальной программе это те параметры, которые передаются при запуске программы из консоли.

Теперь изменим весь этот код на следующий:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 using System;   namespace FirstApp { class Program { static void Main(string[] args) { Calculator.Add(2, 3); Console.ReadKey(); } }   // объявление нового класса class Calculator { public static void Add(int x, int y) { int z = x + y; Console.WriteLine($"Сумма {x} и {y} равна {z}"); } } }

 

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

Во-вторых, я добавил в наше пространство имен новый класс - Calculator, который имеет один метод Add. Этот метод принимает в качестве параметров два числа - x и y и складывает их. Результат сложения помещается в переменную z. А затем сумма выводится на консоль с помощью метода Console.WriteLine.

Метод Console.WriteLine в качестве параметра принимает строку. Здесь применяется интерполяция строк, то есть перед самой строкой ставится знак доллара - $, и после этого мы можем вводить в строку значения переменных и параметров, помещая их в фигурные скобки.

Класс Console, метод которого вызывается, находится в пространстве имен System. Это пространство подключено в начале с помощью директивы using. Без подключения пространства имен System я бы не смог использовать класс Console и вывести строу на консоль. Однако в принципе нам необязательно подключать пространство имен. Мы можем даже удалить первую строку, но в этом случае мы тогда должны будем указать полный путь до используемого класса. Например, в нашем случае мы могли бы написать:

System.Console.WriteLine($"Сумма {x} и {y} равна {z}").

После объявления нового класса мы можем использовать его в методе Main:

1 2 Calculator.Add(2, 3); // вызов метода Add нового класса Console.ReadKey(); // ожидаем ввод пользователя

Метод Add в классе Calculator определен как статический (с ключевым словом static, как и метод Main), поэтому мы можем обратиться к нему по имени класса. В это метод передаются два числа - 2 и 3.

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

Важно, что все эти действия мы делаем в методе Main, так как это входная точка в программу, и именно с него начинается выполнение приложения. Если бы мы не обратились в Main к методу Add, то он бы никогда бы не сработал.

Теперь мы можем запустить на выполнение с помощью клавиши F5 или с панели инструментов, нажав на зеленую стрелку. И если вы все сделали правильно, то вам отобразится консоль где будет красоваться число 5 - то есть сумма чисел 2 и 3.

Итак, мы создали первое приложение. Вы его можете найти на жестком диске в папке проекта в каталоге bin/Debug (оно будет называться по имени проекта и иметь расширение exe) и затем уже запускать без Visual Studio, а также переносить его на другие компьютеры, где есть.NET.

Теперь же рассмотрим основные составляющие синтаксиса языка.

 


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: