Основы C#
October 4, 2022

Введение

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

Машинный код, ассемблер

Каждый компьютер работает только со своим набором команд, машинным языком, определяемым его аппаратной архитектурой. Машинные языки обычно состоят из чисел, которые в конечном итоге представляются в виде последовательности цифр: 0 и 1. Люди привыкли обозначать выполняемые операции знаками и словами, поэтому числовые версии данных операций в машинном языке стали называться кодом. В наше время понятие программного кода используется в более широком смысле, сейчас им именуются программные инструкции в языках любого уровня хоть в высокоуровневых языках и используются обозначений команд знаки и слова.

Понятное дело, работать на машинном языке неудобно, разработка велась медленно, и никакой фронтендер бы не согласился писать на машинном коде ни за какие деньги:)

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

Высокоуровневые языки

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

Языки программирования высокого уровня напрямую не зависят аппаратных средств, но требуют для работы наличия соответствующих программ-трансляторов, занимающихся преобразованием программы в язык машины, на которой данная программа будет выполняться. Данные программы-трансляторы называются компиляторами, а процесс преобразования - компиляцией (если очень упрощенно:).

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

C# и .NET

В 2000 году компания Microsoft представила общественности язык программирования C# вместе с концепцией платформы .NET - концепция использования Интернета и веб-технологий в разработке, производстве, распространении и использовании программных продуктов. .NET по сути стал являться ультимативной платформой с большим разнообразием технологий для разработки различного рода приложений. .NET также позволяет создавать приложения на любом .NЕТ-совместимом языке (таком, как С#, Visual Basic, Visual С++).

Основой для исполнения программ платформы .NET является виртуальная машина CLR (Common Language Runtime). При компиляции код программы компилируется в сборку на промежуточном языке CIL (Common Intermediate Language), после чего подается для исполнения в CLR, а далее при запуске на выполнение подобного приложения происходит JIT-компиляция (Just-In-Time) в машинный код, который затем выполняется. Такое устройство .NET позволяет обеспечить перенос программы с одной платформы на другую при наличии на них данной виртуальной машины.

Также благодаря данной трансляции .NET не привязывает программистов к какому-то конкретному языку, а позволяет разрабатывать приложения на любом языке, совместимым с .NET (C#, VB.NET, Delphi.NET, F#). .NET содержит огромную общую для всех поддерживаемых языков библиотеку классов, которая используется в также предоставляемых ей ряде технологий, разрабатываемых Microsoft. Данные технологии предоставляют разработчикам-пользователям api-интерфейсы для работы с десктопными приложениями (WPF, UWP), веб-приложениями (ASP.NET), для разработки мобильных и кроссплатформенных решений (Xamarin, MAUI), для работы с базами данных (Entity Framework)...

Microsoft долгое время развивало платформу .NET исключительно под Windows без всякой кроссплатформенности под названием .NET Framework. В 2019 была выпущена последняя версия этой платформы - .NET Framework 4.8, и ее поддержка ныне прекращена. Все это потому, что в 2014-м году они начали развивать альтернативную платформу .NET Core, ориентированную уже на кроссплатформенность (ничего нового... Microsoft:). Последовательно были выпущены версии .NET Core 1, .NET Core 2, .NET Core 3, .NET 5. Последней текущей версией платформы является .NET 6 с версией языка C# 10.

Таким образом у Microsoft параллельно развивалось две версии платформы .Net Framework и .Net Core. При этом на .Net Framework у многих уже успело накопиться в проектах довольно жирный кусок легаси, который надо как-то перетаскивать на .Net Core, но платформы были сделаны несовместимыми друг с другом:) По этой причине Microsoft пришлось разработать .Net Standart - это интерфейс/спецификация всего того, что реализуют все платформы .Net, благодаря чему можно подключить библиотеку с .Net Framework к Core.


Вроде бы рассказал все основные моменты касательно того, что из себя в общих чертах представляет .NET и C#. Полную историю языка можете почитать на msdn. Ожидаем релиза .NET 7 c C# 11. В следующей статье распишу все про среду разработки, напишем первую программу и расскажу об основных ее компонентах. Подписывайтесь на наш телеграм-канал, а меня ждут санитары, всем пока!)