Краткий обзор языка C#

Язык C# является самым популярным языком для платформы .NET, бесплатной кроссплатформенной среды разработки открытый код. Программы C# могут выполняться на различных устройствах, от устройств Интернета вещей (IoT) до облака и между ними. Вы можете создавать приложения для телефонных, настольных и ноутбуков и серверов.

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

Hello World

Для первого знакомства с языком программирования традиционно используется программа "Hello, World". Вот ее пример на C#:

// This line prints "Hello, World" 
Console.WriteLine("Hello, World");

Строка начинается с // одной строковый комментарий. Одиночные строковый комментарий C# начинаются и // продолжаются до конца текущей строки. C# также поддерживает несколько строковый комментарий. Несколько строковый комментарий начинаются с /* и заканчиваются*/. Метод WriteLineConsole класса, который находится в System пространстве имен, создает выходные данные программы. Этот класс предоставляется стандартными библиотеками классов, которые по умолчанию автоматически ссылаются в каждой программе C#.

В предыдущем примере показана одна форма программы Hello, World с помощью инструкций верхнего уровня. Более ранние версии C# требуют определения точки входа программы в методе. Этот формат по-прежнему действителен, и вы увидите его во многих существующих примерах C#. Вы также должны ознакомиться с этой формой, как показано в следующем примере:

using System;

class Hello
{
    static void Main()
    {
        // This line prints "Hello, World" 
        Console.WriteLine("Hello, World");
    }
}

В этой версии показаны стандартные блоки, используемые в программах. Программа "Hello, World" начинается с директивы using, которая ссылается на пространство имен System. Пространства имен позволяют иерархически упорядочивать программы и библиотеки C#. Пространства имен содержат типы и другие пространства имен, например System пространство имен содержит множество типов, таких как Console класс, на который ссылается программа, и многие другие пространства имен, IO например и Collections. Директива using, которая ссылается на пространство имен, позволяет использовать типы из этого пространства имен без указания полного имени. Благодаря директиве using в коде программы можно использовать сокращенное имя Console.WriteLine вместо полного варианта System.Console.WriteLine. В предыдущем примере это пространство имен неявно было включено.

Класс Hello, объявленный в программе "Hello, World", имеет только один член — это метод с именем Main. Метод Main объявлен с модификатором static. Методы экземпляра могут ссылаться на конкретный экземпляр объекта, используя ключевое слово this, а статические методы работают без ссылки на конкретный объект. По соглашению, если операторы верхнего уровня не используются статическим методом, который называется Mainточкой входа программы C#.

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

Совет

Примеры, приведенные в этой статье, дают вам первый взгляд на код C#. Некоторые примеры могут отображать элементы C#, с которыми вы не знакомы. Когда вы будете готовы узнать C#, начните с наших начальных руководств или ознакомьтесь со ссылками в каждом разделе. Если у вас есть опыт работы с Java, JavaScript, TypeScript или Python, ознакомьтесь с нашими советами, чтобы помочь вам найти сведения, необходимые для быстрого изучения C#.

Знакомые функции C#

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

Приложения C# получают преимущества автоматического управления памятью среды выполнения .NET. Приложения C# также используют обширные библиотеки среды выполнения, предоставляемые пакетом SDK для .NET. Некоторые компоненты являются независимыми от платформы, такими как библиотеки файловой системы, коллекции данных и математические библиотеки. Другие относятся к одной рабочей нагрузке, например к веб-библиотекам ASP.NET Core или библиотеке пользовательского интерфейса .NET MAUI. Многофункциональная экосистема Open Source в NuGet расширяет библиотеки, которые являются частью среды выполнения. Эти библиотеки предоставляют еще больше компонентов, которые можно использовать.

C# находится в семействе языков C. Синтаксис C# знаком, если вы использовали C, C++, JavaScript или Java. Как и все языки в семействе C, точки с запятой (;) определяют конец инструкций. Идентификаторы C# чувствительны к регистру. C# имеет то же самое использование фигурных скобок, { а также операторов управления, таких как, и , и switchциклов конструкций, таких как elseiffor, и .while} C# также имеет инструкцию foreach для любого типа коллекции.

C# — это строго типизированный язык. Каждая объявленная переменная имеет тип, известный во время компиляции. Компилятор или средства редактирования сообщают вам, используется ли этот тип неправильно. Эти ошибки можно исправить, прежде чем вы когда-либо запускаете программу. Основные типы данных встроены в язык и среду выполнения: такие типы значений, как , doublecharссылочные типы, такие как intstringмассивы и другие коллекции. При написании программ вы создаете собственные типы. Эти типы могут быть struct типами значений или class типами, определяющими объектно-ориентированное поведение. Модификатор можно добавить record в любой struct или class типы, чтобы компилятор синтезирует код для сравнения равенства. Можно также создавать interface определения, определяющие контракт или набор элементов, которые должны предоставлять тип, реализующий этот интерфейс. Вы также можете определить универсальные типы и методы. Универсальные шаблоны используют параметры типа для предоставления заполнителя фактического типа при использовании.

При написании кода вы определяете функции, также называемые методамиstruct, как элементы и class типы. Эти методы определяют поведение типов. Методы могут быть перегружены с разными числами или типами параметров. Методы могут при необходимости возвращать значение. Помимо методов, типы C# могут иметь свойства, которые являются элементами данных, поддерживаемыми функциями, называемыми методами доступа. Типы C# могут определять события, позволяющие типу уведомлять подписчиков о важных действиях. C# поддерживает объектно-ориентированные методы, такие как наследование и полиморфизм для class типов.

Приложения C# используют исключения для создания отчетов и обработки ошибок. Вы будете знакомы с этой практикой, если вы использовали C++ или Java. Код создает исключение, если оно не может сделать то, что было предназначено. Другой код, независимо от количества уровней стека вызовов, может при необходимости восстановиться с помощью try - catch блока.

Отличительные возможности C#

Некоторые элементы C# могут быть менее знакомы. Языковой интегрированный запрос (LINQ) предоставляет общий синтаксис на основе шаблонов для запроса или преобразования любой коллекции данных. LINQ унифицировывает синтаксис для запроса коллекций в памяти, структурированных данных, таких как XML или JSON, хранилище баз данных и даже облачные API данных. Вы узнаете один набор синтаксиса, и вы можете искать и управлять данными независимо от его хранилища. Следующий запрос находит всех учащихся, средний показатель которого превышает 3,5:

var honorRoll = from student in Students
                where student.GPA > 3.5
                select student;

Предыдущий запрос работает для многих типов хранилища, Studentsпредставленных . Это может быть коллекция объектов, таблица базы данных, большой двоичный объект облачного хранилища или структура XML. Один и тот же синтаксис запроса работает для всех типов хранилища.

Модель асинхронного программирования на основе задач позволяет писать код, который считывается как будто он выполняется синхронно, даже если он выполняется асинхронно. Он использует async и await ключевое слово для описания методов, асинхронных и при асинхронном вычислении выражения. В следующем примере ожидается асинхронный веб-запрос. После завершения асинхронной операции метод возвращает длину ответа:

public static async Task<int> GetPageLengthAsync(string endpoint)
{
    var client = new HttpClient();
    var uri = new Uri(endpoint);
    byte[] content = await client.GetByteArrayAsync(uri);
    return content.Length;
}

C# также поддерживает await foreach инструкцию для итерации коллекции, поддерживаемой асинхронной операцией, например API разбиения по страницам GraphQL. Следующий пример считывает данные в блоках, возвращая итератор, предоставляющий доступ к каждому элементу, когда он доступен:

public static async IAsyncEnumerable<int> ReadSequence()
{
    int index = 0;
    while (index < 100)
    {
        int[] nextChunk = await GetNextChunk(index);
        if (nextChunk.Length == 0)
        {
            yield break;
        }
        foreach (var item in nextChunk)
        {
            yield return item;
        }
        index++;
    }
}

Вызывающие методы могут итерировать коллекцию с помощью инструкции await foreach :

await foreach (var number in ReadSequence())
{
    Console.WriteLine(number);
}

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

public static bool Or(bool left, bool right) =>
    (left, right) switch
    {
        (true, true) => true,
        (true, false) => true,
        (false, true) => true,
        (false, false) => false,
    };

public static bool And(bool left, bool right) =>
    (left, right) switch
    {
        (true, true) => true,
        (true, false) => false,
        (false, true) => false,
        (false, false) => false,
    };
public static bool Xor(bool left, bool right) =>
    (left, right) switch
    {
        (true, true) => false,
        (true, false) => true,
        (false, true) => true,
        (false, false) => false,
    };

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

public static bool ReducedAnd(bool left, bool right) =>
    (left, right) switch
    {
        (true, true) => true,
        (_, _) => false,
    };

Наконец, в рамках экосистемы .NET можно использовать Visual Studio или Visual Studio Code с помощью C# DevKit. Эти средства предоставляют полное представление о C#, включая код, который вы пишете. Они также предоставляют возможности отладки.