В этом уроке начнём наше погружение в язык программирования 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#. Базовый уровень“.