C# программисты становятся более востребованными благодаря развивающейся экосистеме языка. На нём пишут бэкенд, приложения, игры.
Разберёмся, в чём причина популярности языка.
Знакомьтесь, C#!
C# обладает выразительным синтаксисом, и его легко изучать. Фигурные скобки узнают все, кто работал в C, C++ или Java. Знакомы с одним из этих языков? Тогда вы быстро начнёте продуктивную работу в C#.
Синтаксис языка устраняет сложности C++ и предоставляет такие мощные возможности, как обнуляемые значения типов, перечисления, делегаты, лямбда-выражения и прямой доступ к памяти. C# поддерживает универсальные методы и типы, которые повышают безопасность типов и производительность. Итераторы позволяют классам создателей коллекций определять кастомные поведения итераций, которые легко использовать в клиентском коде. Выражения интегрированного языка запросов (LINQ) делают строго типизированный запрос первоклассной конструкцией языка.
C# – объектно-ориентированный язык, а значит, поддерживает инкапсуляцию, наследование и полиморфизм. Класс может наследоваться напрямую от одного родительского класса, но может реализовывать любое число интерфейсов. Методы, которые переопределяют виртуальные методы в родительском классе, требуют указания ключевого слова override
для предотвращения случайного переопределения.
В дополнение ко всем плюшкам ООП язык C# облегчает разработку программных компонентов посредством нескольких инновационных конструкций языка:
- Инкапсулированные сигнатуры методов, названные делегатами, включают оповещения о безопасности типов.
- Свойства служат акцессорами к переменным закрытых частей.
- Атрибуты предоставляют декларативные метаданные о типах во время исполнения.
- Строчные документационные комментарии XML.
- Интегрированный язык запросов (LINQ) предоставляет встроенные возможности запросов между различными источниками данных.
Нужно взаимодействовать с другими программами Windows, например, с COM-объектами или со встроенными Win32 DLL? Сделайте это с помощью C# через процесс «Interop». Interop позволяет программам, написанным на C#, делать почти всё, что доступно программам, написанным на C++. C# поддерживает даже указатели и концепцию «небезопасного» кода для случаев, когда прямой доступ к памяти абсолютно критичен.
Причём тут .NET?
Программы C# выполняются поверх .NET Framework – встроенного компонента Windows, который включает в себя виртуальную среду выполнения, называемую общеязыковой исполняющей средой (CLR), и единый набор классовых библиотек. CLR – это коммерческая реализация общеязыковой инфраструктуры (CLI). Она служит основой для создания исполняемых файлов и окружений разработки, в которых языки и библиотеки работают совместно и незаметно.
Исходный код, написанный на C#, компилируется в промежуточный язык (IL), который удовлетворяет спецификации CLI. Код IL и такие ресурсы, как растровые изображения и строки, хранятся на диске в виде исполняемого файла – сборки, обычно с расширениями .exe
и .dll
. Сборка содержит манифест, который предоставляет информацию о типах, версии, культуре и требованиях безопасности сборки.
При запуске программы сборка C# загружается в CLR, которая совершает определённые действия, исходя из информации в манифесте. Если требования безопасности удовлетворяют CLR, она производит JIT-компиляцию, чтобы конвертировать код IL во встроенные машинные инструкции. CLR предоставляет и другие службы, связанные с автоматической сборкой мусора, обработкой исключений и управлением ресурсами. Код, выполняемый в CLR, иногда называют «управляемым кодом» для сравнения с «неуправляемым кодом», который компилируется во встроенный машинный язык, нацеленный на определённую систему.
Вот отношение между временем компиляции и временем выполнения исходников C#, классовых библиотек .NET Framework, сборок и CLR:
Языковая совместимость – ключевая особенность .NET Framework. Так как IL-код производится на C#, компилятор соответствует общей спецификации типов (CTS). IL код, сгенерированный из C#, может взаимодействовать с более чем двадцатью другими CTS-совместимыми языками. Одиночная сборка может содержать множество модулей, а типы могут ссылаться друг на друга так, будто они написаны на одном языке.
.NET Core – кроссплатформенный .NET
Версия Core – это модульная кроссплатформенная open source реализация стандарта .NET общего назначения. Она содержит множество API из .NET Framework и включает среду выполнения, фреймворк, а также инструменты, поддерживающие различные ОС и процессоры. Реализация находилась под управлением наработок из ASP.NET Core, но требовала более современного подхода. Она может использоваться для различных устройств, в облаке и для встроенных/IoT сценариев.
Вот основные характеристики .NET Core:
- Кроссплатформенность: .NET Core предоставляет ключевую функциональность для реализации нужных особенностей вашего приложения, а также возможность повторного использования кода вне зависимости от вашей платформы. Она поддерживает Windows, Linux и macOS. Вы можете писать приложения и библиотеки, которые запускаются на всех поддерживаемых ОС без изменений.
- Open source: .NET Core – один из многих проектов, который находится под управлением .NET Foundation и доступен на GitHub. Использование .NET Core в качестве open source проекта способствует прозрачному процессу разработки и развитию активного, вовлечённого сообщества.
- Гибкий деплой: есть два главных способа деплоя вашего приложения: зависимый от фреймворка и автономный. В первом случае устанавливаются только ваше приложение и зависимости. Приложение зависит от глобальной версии .NET Core. Во втором случае версия .NET Core, которая использовалась для сборки вашего приложения, деплоится вместе с приложением и зависимостями, и может выполняться параллельно другим версиям.
- Модульность: .NET Core обладает модульностью потому, что выпускается через NuGet в меньших пакетах сборок. В отличие от одной большой сборки со всей встроенной функциональностью, .NET Core доступен в виде меньших функционально-ориентированных пакетов. Это приводит к более гибкой модели разработки, позволяет оптимизировать приложение, включая только необходимые пакеты NuGet. Преимущества меньшего поля покрытия приложения отражаются в повышенной безопасности, менее требовательном обслуживании, высокой производительности и в сниженных затратах по принципу «плати только за то, чем пользуешься».
Благодаря .NET Core C# программисты могут разрабатывать не только на Windows.
Xamarin: мобильная разработка на C#? Легко!
Многие думают о разработке под Android и iOS в контексте таких встроенных языков, как Objective-C, Swift, Java и Kotlin.
Xamarin позволяет разрабатывать на C#, используя библиотеки и рантайм, которые работают на iOS, Android и Windows. При этом компилируются встроенные (не интерпретированные) приложения с достаточной производительностью для игр.
Xamarin совмещает все возможности встроенных платформ и добавляет несколько мощных особенностей:
- Полная привязка к базовым SDK: Xamarin содержит привязки практически ко всем базовым платформенным SDK от iOS и Android. Вдобавок эти привязки строго типизированы, что облегчает использование и навигацию, а также включает строгую проверку типов во время компиляции и разработки.
- Interop для Objective-C, Java, C и C++: Xamarin содержит средства для прямого вызова библиотек Objective-C, Java, C, and C++, а значит, вы свободны использовать сторонний код, не изобретая велосипед. Таким образом, вы воспользуетесь преимуществами существующих библиотек iOS и Android, написанных на Objective-C, Java или C/C++.
- Современные языковые конструкции: приложения Xamarin пишутся на C#, современном языке, который содержит существенные улучшения по сравнению с Objective-C и Java. Например, особенности динамического языка, лямбды, LINQ, функции параллельного программирования, дженерики и многое другое.
- Библиотека базовых классов (BCL): приложения Xamarin используют .NET BCL, большую коллекцию классов, которая имеет такие функции, как XML, базы данных, сериализацию, IO, строки и поддержку сети. Существующий код C# можно скомпилировать для дальнейшего использования в приложении, что открывает доступ к тысячам библиотек, которые могут делать то, что недоступно в BCL.
- Современная IDE: Xamarin использует Visual Studio на macOS и Windows. Обе версии обладают такими современными функциями, как автозавершение кода, системой управления проектом, библиотекой шаблонов, встроенным контролем версий.
- Поддержка мобильной кроссплатформенности: Xamarin поддерживает iOS, Android и Windows. Приложения могут иметь до 90% общего кода. Библиотека
Xamarin.Mobile
предлагает унифицированный API для доступа к ресурсам всех платформ.
C# программисты могут разрабатывать кроссплатформенные мобильные приложения на Xamarin!
C# используется в машинном обучении
У вас уже есть опыт в .NET, и вы хотите освоить машинное обучение? ML.NET – это кроссплатформенный фреймворк машинного обучения с открытым исходным кодом.
Он позволяет создавать кастомные ML-модели на C#, не покидая экосистему .NET. Вы можете использовать весь ваш опыт и багаж знаний, накопленный за время работы с .NET, чтобы интегрировать машинное обучение в существующие десктопные, игровые, мобильные или веб-приложения, и даже в IoT-устройства.
Вот что можно сделать с ML.NET:
- Классификация/категоризация: разделяйте пользовательский фидбэк на позитивную и негативную категории автоматически.
- Регрессия/Прогнозирование: непрерывных значений: прогнозируйте цены на недвижимость исходя из размеров и местоположения.
- Обнаружения аномалий: обнаруживайте мошеннические банковские операции.
- Рекомендации: предлагайте продукты онлайн-покупателям исходя из их истории покупок.
Отдельно про игры
Unity – самый популярный игровой движок для разработки инди-игр, и он использует код на C#. Интересно, что сам движок написан на C++, поэтому он освобождает программиста от необходимости разбираться со скоростью исполнения, что идеально для новичков.
Есть и другие движки с поддержкой C#:
- Monogame позволяет «написать игру один раз и играть везде»;
- WAVE – кроссплатформенный движок;
- Xenko – довольно мощный кроссплатформенный движок;
- Duality поддерживает только 2D;
- Xna – официальный движок от Microsoft;
- Flatredball – 2D-движок.
Все перечисленные движки позволяют писать игровой код на C#, но Unity определённо занял особое место в коммерческой разработке. Достаточно вспомнить такие игры, как Rust и Forest – они написаны на Unity, а значит и на C#.
C# программисты имеют большие возможности в геймдеве!
Как всё это влияет на рынок труда?
Возможно, C# программисты не ринулись строем писать мобильные или веб-приложения. Но посмотрите, какие возможности открываются для тех, кто уже знает C#. К тому же, Microsoft планируют к 2021 году объединить .NET Core и .NET Framework совместно с фишками вроде Windows Presentation Foundation (WPF).
C# программисты больше не ограничены платформой Windows. Сегодня они могут смело пробовать себя в роли мобильных, игровых или веб-разработчиков.
Выгода для компаний и стартапов ещё очевидней: можно использовать одну команду разработчиков для всех видов приложений. Улучшается поддержка кода, так как вся база написана на C#, включая серверный бэкенд.
Отдельно стоит отметить машинное обучение – это огромные перспективы для C# разработчиков и для самого языка.
И всем этим вы сможете заниматься в Visual Studio!
Комментарии