Стратегия обучения разработчиков Java#
C# и Java имеют множество сходств. По мере изучения C#вы можете применить большую часть знаний, которые у вас уже есть из программирования на Java:
- Аналогичный синтаксис: Java и C# находятся в семействе языков C. Это сходство означает, что вы уже можете читать и понимать C#. Существуют некоторые различия, но большая часть синтаксиса совпадает с Java и C. Фигурные скобки и точка с запятой знакомы. Операторы управления, такие как
if
,switch
else
совпадают. Цикловые операторыfor
,while
иdo
...while
одинаковы. Одни иinterface
те же ключевые слова дляclass
обоих языков. Модификаторы доступа совпадаютpublic
private
. Даже многие встроенные типы используют одни и те же ключевые слова:int
,string
иdouble
. - Объектно-ориентированной парадигмы: Как Java, так и C# являются объектно-ориентированными языками. Понятия полиморфизма, абстракции и инкапсуляции применяются на обоих языках. Оба добавлены новые конструкции, но основные функции по-прежнему актуальны.
- Строго типизированные: Java и C# являются строго типизированными языками. Тип данных переменных объявляется явно или неявно. Компилятор обеспечивает безопасность типов. Компилятор перехватывает ошибки, связанные с типом в коде, перед запуском кода.
- Кроссплатформенные: Java и C# являются кроссплатформенными. Вы можете запускать средства разработки на любимой платформе. Приложение может работать на нескольких платформах. Платформа разработки не требуется для сопоставления целевой платформы.
- Обработка исключений: как Java, так и C# вызывают исключения для указания ошибок. Оба блока используются
try
- -catch
finally
для обработки исключений. Классы exception имеют аналогичные имена и иерархии наследования. Одно из различий заключается в том, что C# не имеет концепции проверенных исключений. Любой метод может (в теории) вызвать любое исключение. - Стандартные библиотеки: среда выполнения .NET и стандартная библиотека Java (JSL) поддерживают распространенные задачи. Оба имеют обширные экосистемы для других пакетов открытый код. В C# диспетчер пакетов — NuGet. Это аналогично Maven.
- Сборка мусора. Оба языка используют автоматическое управление памятью с помощью сборки мусора. Среда выполнения освобождает память от объектов, на которые не ссылается ссылка. Одно из различий заключается в том, что C# позволяет создавать типы значений в виде
struct
типов.
Вы будете продуктивно работать в C# практически сразу из-за сходства. По мере выполнения вы должны узнать о функциях и идиомах на C# , недоступных в Java:
- Сопоставление шаблонов: сопоставление шаблонов включает краткие условные операторы и выражения на основе формы сложных структур данных. Оператор
is
проверяет, является ли переменная "является" некоторым шаблоном. Выражение на основеswitch
шаблонов предоставляет широкий синтаксис для проверки переменной и принятия решений на основе его характеристик. - Интерполяция строк и необработанные строковые литералы: интерполяция строк позволяет вставлять вычислянные выражения в строку, а не использовать позиционные идентификаторы. Необработанные строковые литералы позволяют свести к минимуму escape-последовательности в тексте.
- Типы, допускающие значение NULL и не допускающие значение NULL: C# поддерживает типы значений, допускающие значение NULL, и ссылочные типы, допускающие значение NULL, путем добавления
?
суффикса к типу. Для типов, допускающих значение NULL, компилятор предупреждает вас, если вы не проверяете наличие передnull
отменой ссылки на выражение. Для типов, не допускающих значение NULL, компилятор предупреждает вас, если вы можете назначитьnull
значение этой переменной. Ссылочные типы, не допускающие значения NULL, свести к минимуму ошибки программирования, которые вызывают ошибку System.NullReferenceException. - Методы расширения. В C#можно создавать методы, расширяющие класс или интерфейс. Методы расширения расширяют поведение типа из библиотеки или всех типов, реализующих заданный интерфейс.
- LINQ: интегрированный язык запросов (LINQ) предоставляет общий синтаксис для запроса и преобразования данных независимо от его хранилища.
- Локальные функции: в C#можно вложить функции в методы или другие локальные функции. Локальные функции предоставляют еще один слой инкапсуляции.
В C# существуют другие функции, которые не находятся в Java. Вы увидите такие функции, как async
и await
using
операторы, которые автоматически освобождают ресурсы, отличные от памяти.
Существуют также некоторые аналогичные функции между C# и Java, которые имеют тонкие, но важные различия:
- Свойства и индексаторы: свойства и индексаторы (обработка класса, например массива или словаря), поддерживают язык. В Java они называют соглашения об именовании методов, начиная с
get
иset
. - Записи: В C#записи могут быть либо типами ссылок, либо
class
struct
(значение). Записи C# могут быть неизменяемыми, но не обязательно быть неизменяемыми. - Кортежи имеют другой синтаксис в C# и Java.
- Атрибуты похожи на заметки Java.
Наконец, существуют функции языка Java, недоступные в C#:
- Проверенные исключения: в C#любой метод теоретически может вызвать любое исключение.
- Проверенная ковариация массива: в C#массивы не являются безопасными ковариантными. Если вам нужны ковариантные структуры, следует использовать универсальные классы и интерфейсы коллекции.
В целом, обучение C# для разработчика, опытного в Java, должно быть гладким. Вы найдете достаточно знакомых идиом, чтобы быстро быть продуктивными, и вы узнаете новые идиомы быстро.