В этом уроке начнём наше погружение в язык программирования C#, разберемся с тем, зачем нужен файл Program.cs, посмотрим на его структуру, и познакомимся с понятием класса в C#.
Язык программирования C#
Язык программирования C# разработан компанией Microsoft. Первая версия языка вышла в начале 2002 года. На момент создания курса (2023 год) актуальная версия языка: 12. C# является объектно-ориентированным языком общего назначения с C-подобным синтаксисом. Если у вас есть опыт разработки на C/C++/Java, то на C# вам будет разрабатывать довольно комфортно.
C# это язык со статической типизацией, который поддерживает полиморфизм, перегрузку операторов, обобщённые типы и методы, итераторы, анонимные функции (с замыканиями), исключения. Для обработки ошибок используются исключения. Для работы с коллекциями есть очень мощный инструмент LINQ. Об этих и многих других возможностях языка мы с вами познакомимся на этом курсе.
Файл Program.cs
На предыдущем уроке мы разобрались с тем, как создавать C#-проекты. Кратко напомним: это можно сделать с помощью консольной утилиты dotnet
, набрав команду:
$ dotnet new console -o DemoApp1
Либо в IDE, используя соответствующий мастер для создания проектов.
В результате в проекте типа "Console Application"
будет создано два файла:
DemoApp1.csproj
– конфигурационный файл проекта;Program.cs
– файл с исходным кодом.
Конфигурационный файл проекта (имеет расширение .csproj
), мы разобрали на предыдущем уроке. В рамках этого степа более внимательно посмотрим на Program.cs
.
Начнем с того, что Program.cs
может быть представлен в двух вариантах. Первый вариант, назовем его полным, был единственно доступным до версии C# 9.0, выглядит он так:
namespace DemoApp2 { internal class Program { static void Main(string[] args) { Console.WriteLine("Hello, World!"); } } }
Второй вариант файла Program.cs
(сокращенный), выглядит так:
// See https://aka.ms/new-console-template for more information Console.WriteLine("Hello, World!");
Он появился в C# 9.0 и является вариантом “по умолчанию”, если вы создаете проект с использованием утилиты dotnet
. Для того чтобы получить полный вариант, в Visual Studio нужно поставить галочку "Do not use top-level statements"
.
Технически они эквиваленты и при компиляции превратятся в один и тот же код для среды исполнения .NET.
Посмотрим на внутреннее устройство файла Program.cs
. Начнем с полной версии.
Первое, что мы видим – это объявление пространства имен DemoApp2
:
namespace DemoApp2 { // ... }
Пространства имен – это своего рода контейнеры, в которые помещаются классы C#, они нужны для организации кода в логические блоки. Для объявления пространства имен используется ключевое слово namespace
.
Таким образом, в программе выделился логический блок DemoApp2
, в котором будут лежать все необходимые классы. В нашем случае – это всего один класс с именем Program
. Обратите внимание, что файл, в котором лежит этот класс, имеет такое же имя: Program.cs
, для стиля разработки на C# это важно, и вам стоит придерживаться такой практики – имя файла и имя класса должны совпадать. Также отметим, что в одном файле не стоит создавать более одного класса.
internal class Program { // ... }
Для объявления класса используется ключевое слово class
.
Единицей исполнения кода в классе является метод. Метод, с которого начинается выполнение вашей программы, называется точка входа
. В C# точкой входа по умолчанию является метод с именем Main
:
static void Main(string[] args) { Console.WriteLine("Hello, World!"); }
В этом методе всего одна строка:
Console.WriteLine("Hello, World!");
При её выполнении в консоль будет выведено: "Hello, World!"
.
При компиляции второго варианта (сокращенного) файла Program.cs
всё необходимое окружение для строки Console.WriteLine("Hello, World!");
в виде, метода Main
, класса Program
и пространства имен будет сгенерировано компилятором.
Классы в C#
Классы являются основными строительными блоками, из которых формируются программы на языке C#. Фактически в C# ничего не может существовать вне классов. Невозможно создать функцию, которая не находится внутри какого-то класса.
Для объявления класса используется ключевое слово class
, после которого располагается его имя.
class MyClass { // Содержимое класса }
Класс может содержать различные структурные элементы, такие как поля, свойства, методы, константы и т.п.
Со всеми этими аспектами мы познакомимся в рамках этого курса, в данный момент наиболее важным является понятие метода.
Методы
Метод представляет собой блок кода (набор инструкций), который можно вызвать.
Ниже представлен пример метода PrintHello
, входящего в состав класса MyClass
.
class MyClass { public void PrintHello() { Console.WriteLine("Hello"); } }
Создадим объект класса MyClass
и вызовем у него метод PrintHello
. Всё вместе будет выглядеть так
- Для полной версии:
namespace DemoApp2 { internal class Program { static void Main(string[] args) { Console.WriteLine("Hello, World!"); var m = new MyClass(); m.PrintHello(); } } class MyClass { public void PrintHello() { Console.WriteLine("Hello"); } } }
- Для сокращенной версии:
Console.WriteLine("Hello, World!"); var m = new MyClass(); m.PrintHello(); class MyClass { public void PrintHello() { Console.WriteLine("Hello"); } }
Для вывода строки на консоль мы используем метод WriteLine
, обратите внимание: в этом случае нет необходимости в предварительном создании объект класса Console
. Это возможно из-за того, что метод WriteLine
является статическим: перед его именем, в объявлении стоит ключевое слово static
. Если мы добавим static
к методу PrintHello
, то его тоже можно будет вызывать без создания экземпляра класса MyClass
.
Вариант для сокращенной версии:
Console.WriteLine("Hello, World!"); MyClass.PrintHello(); // Новый вариант вызова метода PrintHello class MyClass { public static void PrintHello() { Console.WriteLine("Hello"); } }
Если Вы хотите больше узнать про язык C#, приглашаем Вас на наш курс “C#. Базовый уровень“.