Введение в C#

C# (читается как “си шарп”) – простой, мощный, статически типизированный, объектно ориентированный язык программирования от компании Microsoft. C# входит в семейство языков программирования C, синтаксис языка покажется знакомым программистам, которые работали с C, C++, Java и JavaScript.

Первая версия языка C# была создана в 1998-2001 годах, группой инженеров Microsoft под руководством Андреса Хейлсберга и Скотта Вильтаумота, как основной язык программирования платформы Microsoft .Net.

C# вобрал в себя лучшие свойства языков C, C++, Modula, Object Pascal, опираясь на опыт их практического использования. Некоторые проблемные модели, которые до этого использовались в языках программирования, к примеру множественное наследование классов(используется в С++), были сознательно выключены.

Во многих отношениях язык C# очень похож на Java, это сходство заметно в синтаксисе и основных понятиях этих языков программирования.

История появления

Название C# толкуется как следующее поколение развития С++, а символ # – обозначает “++++”. Изначально в языке фигурировал диез - “♯”(на английском sharp), однако из-за отсутствия этого символа на клавиатуре, используется знак для обозначения номера “#”. В общем название языка можно обозначать обеими символами.

Разработка языка C# началась в декабре 1998 года и готовилась к выпуску вместе с продуктами группы Millenium. Проект имел название COOL(C-style Object Oriented Language) и разрабатывался как аналог Java от компании Oracle. C# был анонсирован, в 2000 году, как основной язык платформы Microsoft .Net Framework. В этом же году, появилась первая общедоступная бета версия.

Первая финальная версия языка программирования C# была выпущена в 2002 году вместе со средой интегрированной разработки программного обеспечения Visual Studio .Net.

Подобно к Java, C# получил следующие концепции:

  • виртуальная машина – платформа .Net исполняет программу подобно виртуальной машине Java;
  • байт-код – программный код компилируется в промежуточный язык MSIL(Microsoft Intermediate Language), и только потом преобразуется в машинный язык, в зависимости от платформы на которой запускается программа;
  • управляемый код – поскольку программы, написанные на C#, запускаются исключительно в виртуальной среде CLR(Common Language Runtime), то можно контролировать их выполнение и останавливать их в любой момент, а также контролировать использование памяти, при необходимости - выделять или удалять части памяти, которые использует программа.

Версии языка C#

Версия 1

В первую версию языка вошли:

  • свойства – конструкции подобные полям класса, основным отличием от последних есть то, что при обращении к свойствам вызываются методы get set;
  • индексаторы – похожи на свойства, но на вход принимают индекс, как это реализовано в массивах;
  • события – парадигмы программирования, в которых исполнение программы зависит от действий пользователя(взаимодействие со средствами ввода), сообщений полученных от других программ, потоков или операционной системы;
  • циклы – конструкции, которые позволяют многократно повторять части кода;
  • делегаты – классы, которые хранят в себе ссылки на методы;
  • структуры – типы данных, которые могут содержать наборы значений соответственных типов.

Кроме приведенных, язык получил некоторые возможности, которые отсутствовали в Java:

  • беззнаковые типы данных;
  • оператор goto;
  • перегрузку(переопределение) операторов;
  • передача в метод параметров по ссылке;
  • методы с разным числом параметров(реализуется путем перегрузки метода);

В C# также осталась возможность, хоть и очень ограниченная, использовать указатели.

Версия 2

В эту версию языка вошли такие нововведения:

  • возможность разделить один класс на несколько физических файлов;
  • nullable типы данных, которые обозначаются как тип?, например double? d = null;
  • обобщенные типы данных, или generics, которые поддерживаются на уровне CLR;
  • итератор yield;
  • анонимные методы;
  • новый оператор “??”, который является упрощенной формой тернарного оператора, для проверки объекта на null. Записи x = o1 != null ? o1 : o2; и x = o1 ?? o2 идентичны;

Версия 3

  • поддержка LINQ(language integrated query) – синтаксиса, который позволяет выполнять запросы, подобные до SQL, к разным типам данных;
  • создание объектов с одновременной инициализацией полей;
  • лямбда выражения;
  • неявная типизация, путем введения ключевого слова var;
  • анонимные типы данных;
  • методы расширения;

Версия 4

Самым важным нововведением стал тип данных dynamic, который позволил реализовать позднее связывание объектов, для использования с:

  • динамически типизированными языками Python, Ruby;
  • автоматизацией продуктов Microsoft Office с использованием COM-объектов;

Кроме этого в язык вошли следующие возможности:

  • библиотека для работы с параллельными задачами;
  • класс MemoryCache для кэширования даних;
  • классы мульти-поточных коллекций в System.Collections.Concurrent;

Версия 5

Эта версия расширилась набором классов для работы с асинхронными операциями. Появились новые ключевые слова async, await, а также TAP шаблон(Task-based Asynchronous Pattern).

Версия 6

Все изменения, которые вошли в эту редакцию языка С#, являются синтаксическим сахаром – упрощают написание конструкций.

  • инициализация свойств со значениями (public int Number { get; set; } = 42;);
  • интерполяция строк, позволила использовать имена переменных при построении строк (text = $“Hello {name}”);
  • лямбда-выражения для упрощенной записи методов (public int Sqr(int a) => a*a;);
  • импорт статических классов;
  • инициализация Dictionary;
  • Элвис (null условный) оператор - “?.”
  • оператор nameof – возвращает имя параметра, который в него передан;
  • await в catch и finally блоках;
  • фильтры исключений.

Версия 7

  • бинарные литералы – для записи чисел в двоичной системе счисления (0b0001);
  • локальные функции;
  • кортежи (tuples), позволяют методу возвращать несколько значений одновременно;
  • сопоставление с шаблоном (pattern matching) – позволяет писать конструкции if(x is int i);
  • возможность возвращать из методы ссылку на объект.

Платформа .Net

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

Многоязычность

Кроме C#, среда CLR поддерживает много других языков программирования, в частности Microsoft разрабатывают Visual Basic .Net и F#. Кроме этого существуют .Net реализации языков: Delphi.Net, IronPython, IronRuby, Boo, PascalABC.Net.

Кроссплатформенность

.Net позволяет разрабатывать программное обеспечение под разные операционные системы: Windows, MacOS, Linux, Android, iOS. Mono – реализация .Net для Linux. Среды разработки: Visual Studio, Visual Studio Code, Unity3D, Xamarin, SharpDevelop, MonoDevelop покрывают все операционные системы и технологии, и позволяют делать мобильные, настольные(desktop), Web, встроенные(embedded) приложения и сервисы.

Разнообразие технологий

Среда CLR и библиотека классов .Net Framework включают в себя основу для многих технологий, которые разработчики могут использовать при создании продуктов. В частности LINQ, EntityFramework, ADO.Net – технологии, используются для работы с разными данными. Технологии WindowsForms, WPF, ASP.Net, ASP.Net MVC – для создания desktop и Web приложений.

Смотрите также: