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 приложений.